关于redis的几件小事(七)redis缓存雪崩与穿透

1.缓存雪崩

(1)什么是缓存雪崩

缓存雪崩指的是在同一时刻,缓存大量失效,致使大量的请求直接到了数据库,数据库压力剧增,引发系统崩溃。可能出现的状况有:
①大量的key设置了相同的过时时间,致使在缓存在同一时刻所有失效,形成瞬时DB请求量大、压力骤增,引发雪崩。
②缓存系统出现故障,形成缓存系统没法提供服务,形成瞬时DB请求量大、压力骤增,引发雪崩。redis

(2)怎么避免缓存雪崩

事前
①在设置key的过时时间时,在过时时间上加上一个随机值,防止大量key同时过时。
②搭建高可用的缓存架构,好比使用 哨兵+主从 结构或者使用 cluster模式,避免缓存系统出现故障。
③能够在系统中使用ehcache作个小缓存,防止redis崩掉以后,还有一部分缓存。
事中
①对系统请求进行降级和限流,防止数据库之间崩掉。
过后
赶快使用redis持久化的数据,快速恢复缓存数据数据库

2.缓存穿透

(1)什么是缓存穿透

缓存穿透是指有请求访问到了并不存在的数据,这样请求就会直接到达数据库,数据库就会压力剧增。缓存

(2)怎么避免缓存穿透

①能够使用一个足够大的bitmap,将可能存在的key放到里面,请求过来先检查bitmap里面有么有,若是没有直接过滤掉这个请求。
②将数据库查询出来的空值也放到缓存里面去,是这个key对应一个空值,只是这个key设置的时间比较短。架构

3.缓存击穿

(1)什么是缓存击穿

一个存在的key,在缓存过时的一刻,同时有大量的请求,这些请求都会击穿到数据库,形成数据库请压力骤增。it

(2)怎么避免缓存击穿

在访问key以前,采用SETNX(set if not exists)来设置另外一个短时间key来锁住当前key的访问,访问结束再删除该短时间key。class

相关文章
相关标签/搜索