Redis之缓存雪崩,缓存穿透,缓存击穿描述及解决方案

  • Post author:
  • Post category:其他




一,缓存雪崩



1 什么是缓存雪崩

缓存雪崩是指我们缓存中的数据同一时间大面积失效,而新的缓存数据又没有加载入缓存中。使得大量原本应该请求缓存的数据,全部去请求数据库而数据库又承受不住的此时的QPS而挂掉,从而产生一系列连锁反应,使得整个系统崩溃。



2 缓存雪崩的解决方案

(1) redis批量存储缓存数据的时候,对每一个key都加一个随机的失效时间。使得缓存中的数据不会再同一时间段大面积的数据失效。如(

setRedis(Key,value,time + Math.random() * 10000);

)



二,缓存击穿



1 什么是缓存击穿

缓存击穿是指缓存中的某个key非常的热点在不停的扛大并发,在这个key失效的瞬间,持续的大并发,击穿缓存,直接请求数据库。



2 缓存击穿的解决方案

(1) 设置热点数据永不过期



三,缓存穿透



1 什么是缓存穿透

(1) 缓存穿透是指缓存和数据库中都没有的数据。而用户对该数据不断的进行请求,使得数据的查询全部落在数据库中,此时的用户很有可能是攻击者,严重的情况下会使得数据库宕机或者挂掉。



2 缓存穿透的解决方案

(1) 当用户发起请求的时候,我们在缓存和数据库中都没有取到数据的时候我们为该key的value设置为null或者’稍后重试’…有效时间可以设置短点一般设置30秒太长会造成正常业务也不能使用。这样可以防止攻击者通过某一个id进行攻击而造成的缓存穿透。

(2) 将数据库中所有的查询条件全部放入布隆过滤器,当请求过来的时候先查询布隆过滤器中是否存在,如果存在则查询数据库,如果不存在则不查询数据库。



版权声明:本文为qq_39290878原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。