redis的雪崩、穿透、击穿

什么是缓存穿透

一般的缓存系统,都是根据key值去缓存查询,如果不存在对应的key值,就应该去数据库中查询。这个时候,如果请求的并发量很大,就会对后端的数据库系统造成很大的压力。这就叫缓存穿透。简单理解是:缓存value为空;并发量很大,对数据库造成很大压力。

造成原因

1.业务自身代码出现或者数据出现问题。
2.一些恶意攻击、爬虫造成大量空值,此时会对数据库造成很大压力。

解决办法

1.设置布隆过滤器,将所有可能存在的哈希key值放入到一个很大的bitmap中,一个哈希key在bitmap中不存在的就进行拦截,从而避免了对底层存储系统的查询压力。
2.在缓存中设置一个空值的key,过期时间要设置短一点,不超过5分钟。

雪崩

缓存在同一时间内key值大量失效,造成大量的请求瞬间都落在了数据库上导致连接异常。

解决办法

1.建立备份缓存,缓存A和缓存B,A设置超时时间,B不设值超时时间,先从A读缓存,A没有读B,并且更新A缓存和B缓存;
2.设置缓存超时时间的时候加上一个随机的时间长度,比如这个缓存key的超时时间是固定的5分钟加上随机的2分钟,酱紫可从一定程度上避免雪崩问题;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,092评论 0 13
  • --- layout: post title: "如果有人问你关系型数据库的原理,叫他看这篇文章(转)" date...
    蓝坠星阅读 864评论 0 3
  • 今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致...
    不_一阅读 633评论 1 1
  • 内心的宁静源于把目标和努力放在疗愈自己上,而不是评论评判他人和环境上。你在什么地方耕耘就会在什么地方收获。 ​​​
    静待花开jl阅读 225评论 0 1
  • 曾经有句话风靡网络,“出来混的,迟早都是要还的”。你,我,之间又何尝不是这样,遇见你很容易,难得的是,拥有你。 在...
    晓茗涵的猎户座阅读 899评论 0 1