Redis缓存击穿、穿透、雪崩

高并发下缓存失效问题;缓存穿透缓存击穿缓存雪崩

缓存穿透

指查询一个—定不存在的数据(从头到尾、自始至终数据库也不存在的数据),必然导致缓存不命中,直接查询数据库,但是数据库也无此记录
我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义

风险: 利用不存在的数据进行攻击,数据库瞬时压力增大,最终导致崩溃
解决:

  1. 将数据库查询结果或null进行缓存,并加入短暂过期时间

缓存雪崩

缓存雪崩是指在我们设置缓存时key采用了相同的过期时间,导致缓存在某一时刻大量的key同时失效,请求全部转发到DB, DB瞬时压力过重雪崩。

解决: 原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

缓存击穿

某一时刻某个热点Key突然失效,导致大量的请求都打到了数据库

解决: 加锁;大量并发请求只允许一个去查数据库,其余进行等待,查到以后并进行缓存后释放锁,其他请求获取到锁,先查缓存,就会有数据,不用去db

猜你喜欢

转载自blog.csdn.net/weixin_43859011/article/details/132849997