绳锯木断,水滴石穿!
Redis > 缓存穿透,缓存雪崩,缓存击穿以及解决办法

缓存穿透,缓存雪崩,缓存击穿以及解决办法

2020-10-04 分类:Redis 作者:Agoni 阅读(655)

(1)缓存穿透:指的是操作直接穿过了缓存层面,直接到达db层面,从而称为缓存穿透。直接查询某一条不存在的数据,就会发生这种情况(其实还是要经过缓存层,只不过缓存层没有这条数据,就会发起db层面的操作)。

解决方案:

1. Bloom filter算法(布隆过滤器???)

2. 空值缓存: 一种比较简单的解决办法,在第一次查询完不存在的数据后,将该key与对应的空值也放入缓存中,只不过设定为较短的失效时间,例如几分钟,这样则可以应对短时间的大量的该key攻击,设置为较短的失效时间是因为该值可能业务无关,存在意义不大,且该次的查询也未必是攻击者发起,无过久存储的必要,故可以早点失效。

(2) 缓存雪崩:多个缓存数据设置的失效时间相同,在同一时间同时失效,大量系统请求从请求缓存变成请求数据库,造成数据库崩溃。

解决方案:

1. 交错失效时间(即更改数据缓存的有效期,建议设置成固定时间的随机时间,例如设置成3-5秒钟中间的任意时间)。

2. redis高可用

这个思想的含义是,既然redis有可能挂掉,那我多增设几台redis,这样一台挂掉之后其他的还可以继续工作,其实就是搭建的集群。

3.限流降级

这个解决方案的思想是,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

4. 数据预热

数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

(3) 缓存击穿:缓存击穿实际上是缓存雪崩的一个特例,击穿与雪崩的区别即在于击穿是对于特定的热点数据来说,而雪崩是全部数据。(典型例子:微博的热点话题)。

解决方案:1. 二级缓存(参考链接)(阿里双十一流量缓存击穿解决办法)LRU-K算法

参考:

https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pc

https://baijiahao.baidu.com/s?id=1655304940308056733&wfr=spider&for=pc

「 有志者自有千计万计,无志者只感千难万难 」

赞(0) 打赏
0

谢谢,共同进步~

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

0 条评论关于"缓存穿透,缓存雪崩,缓存击穿以及解决办法"

博客简介

loading......
姓名:张峰
性别:男
爱好:女
喜欢:旅游,煲剧,写书法,写博客,欢迎一起交流。。。。。。

精彩评论

友情链接

没有人陪你走一辈子,所以你要适应孤独,没有人会帮你一辈子,所以你要奋斗一生!申请交换友链

站点统计

  • 文章总数: 24 篇
  • 草稿数目: 0 篇
  • 分类数目: 10 个
  • 独立页面: 1 个
  • 评论总数: 21 条
  • 链接总数: 3 个
  • 标签总数: 26 个
  • 访问总量: 8082052 次
  • 最近更新: 2021年10月13日
服务热线:
 1995****175

 QQ在线交流

 旺旺在线