缓存穿透 缓存击穿 缓存雪崩

背景

之前在B站看模拟面试的时候,有问到缓存相关的问题,然后我一脸懵*。在此记录一下。

概念

图1 查询各情况列举

缓存穿透

图1 中的“B -> E”,某一个key在缓存中未查询到值,去DB中查也没有,导致大量请求同时打到了DB。

缓存击穿

图1 中的“B -> C -> D”,缓存中某一个key失效了,DB中存在,导致大量请求同时打到了DB。DB扛过去的话,后面的请求就可以去缓存里面读数据,有时候服务器出现性能峰值就是这种情况。

缓存雪崩

图1 中的“B -> C -> D”,缓存中大量Key都失效了,DB中存在,导致更多的数据查询请求打到DB。这种DB可能会挂掉,导致整个服务都不可用了,比较严重。

解决方案

我目前接到的业务,都木有这么大的流量,还没有出现过上述情况,所以解决方案都是在网上看到的,没有生产环境的应用经验,仅供参考【迅速甩锅......

缓存穿透

  • 接口层增加 用户鉴权、查询条件合法性校验
  • 将key-null也写入缓存,有效时间设置得短一点
  • 布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力

缓存击穿

  • 热点key过期时间无限长
  • 去DB中查数据的时候加互斥锁,实现的方式有很多

缓存雪崩

  • 不同key过期时间在基数上增加随机值,避免同一时间大量数据过期
  • 热点数据尽量存储在不同数据库中
  • 热点key过期时间无限长

参考

缓存穿透、缓存击穿、缓存雪崩区别和解决方案

REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案

Redis的SETNX的使用方法

布隆过滤器(Bloom Filter)的原理和实现

布隆过滤器的方式解决缓存穿透问题

Redis缓存穿透解决方法--布隆过滤器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值