穿透
定义:用户查询数据,redis里面没有,于是访问数据库,数据库也没有。大量用户访问同一个redis没有的数据,对数据库造成巨大的压力。
解决方法:
布隆过滤器
设置null值(redis数据量过大内存占用高,并且存在redis和数据库数据不一致的可能性)
击穿
定义:是指一个非常热点的key,在不停的扛着大并发,当这个key失效时,一瞬间大量的请求冲到持久层的数据库中,就像在一堵墙上某个点凿开了一个洞!
解决方法:
设置不过期(逻辑过期)
互斥锁
雪崩
定义:在某一个时间段,缓存的key大量集中同时过期了,所有的请求全部冲到持久层数据库上,导致持久层数据库挂掉!or Redis服务直接挂掉,请求只能打到数据库。
解决方法:
搭建redis集群,设置哨兵(为了防止redis服务挂掉)
数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀