美文网首页
redis缓存一致性、穿透、击穿、雪崩问题

redis缓存一致性、穿透、击穿、雪崩问题

作者: matthewfly | 来源:发表于2020-12-07 16:45 被阅读0次
  1. 一致性问题
  • 原因:由于数据写入更新db操作分为更新db、更新缓存两步,而两步并非原子性操作,所以存在数据不一致问题。
  • 建议方案:在做更新操作时,先更新db,因为我们数据以db为准,如果后续更新缓存失败,可以以db重建数据,不影响业务正确性。
  • 更优方案:类似于分布式事务最终一致性,更新完db后,将操作放入消息队列,利用消息队列的重试保证缓存的更新,若达到重试次数发送警告人工干预。
  1. 缓存穿透
  • 原因:缓存中不存在key对应的数据,同时db中也不存在该数据,每次访问都将从缓存到db走一遍,当访问量过大时可能拖垮数据库。
  • 解决方案:由于缓存不存在导致的穿透,可以简单的将不存在的key也添加空数据缓存,设置较短有效时间;另外,可以添加布隆过滤器等,不存在的key在布隆过滤器中肯定为空,也可以防止穿透。
  1. 缓存击穿
  • 原因:缓存中存在的高热点数据已经过期,此时大量并发请求访问这些热点数据,都将之间访问db,可能导致数据被压垮。
  • 解决方案:为高热点数据数据库访问建立互斥锁,例如redis的setnx命令,访问db前先尝试获取锁,成功则访问db,失败则再次读取缓存。
  1. 缓存雪崩
  • 原因:缓存服务器重启或者大量缓存同时失效时,高并发的访问将之间打到数据库,造成数据库被压垮。
  • 解决方案:通过加锁或者队列限制对db访问;对同一时间大量失效的缓存,分散其失效时间,随机增加一小段失效时间。

参考:
https://www.cnblogs.com/xichji/p/11286443.html

相关文章

网友评论

      本文标题:redis缓存一致性、穿透、击穿、雪崩问题

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