Redis缓存三大问题-穿透、击穿、雪崩

缓存穿透

缓存中明明没有对应数据,但是有大量的请求这些不存在的数据,导致大量请求直接打在DB上

缓存空对象 设置空key

缺点:大量浪费Redis的内存空间,建议还是要给空key设置一个过期时间

利用singleflight 往 redis 写空null + 异步定时脚本从db刷有效缓存,应该是这么个用法

设置布隆过滤器

布隆过滤器就是一种方便检测数据库中是否含有对应key的工具。

布隆过滤器在使用上可能比设置空key节省内存空间,因为bitmap本身占用空间很小
但是布隆过滤器是要经过复杂计算的,而且它的精确度也无法达到100%,精度需求越高计算量就越大。

还有其他过滤器,比布隆更牛逼些

缓存击穿

大量请求同一个key 但是这时恰好这个key到了过期时间
所有的请求都打向了DB这时就有可能造成DB被打崩

加互斥锁

同时大量相同的请求打到DB,那么就可以加互斥锁
同时只能一个请求打到DB
其他的请求陷入自旋状态
直到唯一 一个到大DB的请求把数据写回到Redis,再从Redis拿回数据即可
比如 go 的 singleflight

设置热点数据不过期

只要key不过期 那么就永远不会发生击穿,但运行维护成本会直线上升。

缓存雪崩

大面积key同时失效 导致缓存彻底失去作用

方案1: redis高可用:多增设redis实例,以集群的方式防止Redis单实例宕机后引发雪崩
方案2: 限流降级 : 通过加锁或队列的方式控制线程数量
方案3: 数据预热 :提前设置好key,exp random,比如 rand(x)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值