侧边栏壁纸
博主头像
丛庆

没事儿写代码,有事写代码。email:1024@cong.zone

  • 累计撰写 116 篇文章
  • 累计创建 97 个标签
  • 累计收到 4 条评论

【Redis】Redis的穿透、雪崩、击穿

丛庆
2022-03-25 / 0 评论 / 0 点赞 / 477 阅读 / 373 字 / 正在检测是否收录...
温馨提示:
部分资料和图片来源于网络,如有危害到您的利益请与我联系删除,1024@cong.zone。

缓存穿透

情景

用户请求的数据,在缓存中不存在,数据库中也不存在。这样缓存就没有办法命中,每一次请求都会打到数据库。

解决方案

  • 缓存空对象
    • 优点:实现简单
    • 缺点:
      • 额外的内存消耗
      • 短时间的数据不一致
  • 布隆过滤器
    • 优点:布隆过滤器可以只占用极少的空间来判断数据是否存在
    • 缺点:
      • 实现相对复杂
      • 哈希冲突时,存在误判的情况

缓存雪崩

情景

在短时间内,缓存中大量的Key同时失效或者Redis挂掉了,这是大量的请求就直接打到了数据库。

解决方案

  • 在将数据导入缓存时,在相同的ttl时间后追加相应的随机值(避免同一时间过期)
  • 使用Redis集群避免服务挂掉
  • 在架构上增加服务降级等策略
  • 使用多级缓存(每个节点上都使用相应的缓存)

缓存击穿

情景

慢查询缓存过期,大量请求同时发起慢查询。

解决方案

  • 使用分布式锁,同一时间只有一个请求可以发起慢查询
  • 使用逻辑过期方案,异步发起慢查询更新缓存,并将过期数据返回。
0

评论区