美文网首页
redis缓存雪崩/缓存击穿/缓存穿透

redis缓存雪崩/缓存击穿/缓存穿透

作者: 乂尤先生 | 来源:发表于2020-07-01 10:01 被阅读0次

缓存雪崩


什么是缓存雪崩

当某一时刻发生大规模的缓存失效问题,比如缓存服务宕机了

例子:

如果一个首页的key失效时间都是12小时,中午12点刷新。但是零点有个秒杀活动导致大量用户涌入,假设每秒10000个请求,本来缓存可以抗住每秒5000请求,但是缓存当时所有key都失效了,此时每秒10000个请求都会落在数据库上,数据库扛不住,DBA没反应过来直接挂了。此时,如果没有什么特别的方案来处理故障,DBA着急,重启数据库,但是数据库又被新的流量给打死了。

解决办法:
  1. 在往redis存数据的时候,把每个key的失效时间都加个随机值,保证数据不会在同一时间大面积失效
  2. 设置热点数据永不过期,采用定时任务对快要失效的缓存进行更新缓存和失效时间
  3. 采用集群,降低服务宕机的概率

缓存穿透


什么是缓存穿透

用户不断的去请求一条缓存和数据库中都没有的数据

例子:

我们数据库id都是从1开始自增的,如果发起一条id为-1的数据或者id大的不存在的数据,这时的用户可能是攻击者,攻击会导致数据库压力增大,严重会压垮数据库

解决办法:

从缓存取不到的数据,在数据库中也没有取到,这是可以先将对应key的Value写为null,未知错误,稍后重试这样的值【具体值可问产品】,缓存有效时间可以设置短点,如30秒,防止正常情况也无法使用

缓存击穿


什么是缓存击穿

在高并发的情况下,大量请求同时查询同一个key时,此时这个key正好失效,就会导致同一时间,这些请求都会去查询数据库。

解决办法:
  1. 采用锁,只有拿到锁的第一个线程去请求数据库,然后插入缓存。每次拿到锁的时候都会查询一下缓存有没有
  2. 设置热点数据永不过期

相关文章

网友评论

      本文标题:redis缓存雪崩/缓存击穿/缓存穿透

      本文链接:https://www.haomeiwen.com/subject/jcqcqktx.html