DEV Community

testted123456
testted123456

Posted on

Redis-穿透、击穿、雪崩

一、穿透

  1. 查询的key不在redis中,请求就会打到数据库。低频穿透不要紧,要防止高频穿透。

  2. 解决方案一:短暂缓存空对象

  • 只能保证db和redis弱一致性

  • 如果缓存大量空对象,会占用大量内存;同时redis有LRU/LFU内存淘汰策略,会将有价值的数据淘汰

  1. 解决方案二:Bloom Filter
  • bloom filter认为这条数据存在,不一定存在于redis中;但bloom filter认为这条数据不存在于redis中,则一定不存在于redis中

二、穿透

  1. “穿透”是“击穿”的特殊表现形式,热点key被击穿;比如微博的热点事件导致微博瘫痪

  2. 解决方案一:热点key不过期

  • 可能导致db和redis不一致
  1. 解决方案二:分布式锁
  • 热点key在redis查不到,只允许一个request打到db

三、雪崩

  1. “雪崩”是“穿透”的特殊表现形式,多个热点key失效

  2. 原因:

  • 过期时间比较一致,某个时间同时失效,可以将失效时间设为随机数

  • redis挂了,可以使用集群

  1. 解决方案一:数据预热,缓存时间随机
  • 项目启动时将db的数据同步到redis,并设置随机值为过期时间
  1. 解决方案二:redis集群

Top comments (0)