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

18 篇文章 1 订阅

缓存击穿:是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库

缓存雪崩:缓存雪崩是因为大面积的缓存失效,打崩了DB。

缓存穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。

Redis雪崩效应的解决方案
  1. 分布式锁(本地锁)

    对数据库服务请求进行限制,使用锁机制,保证只有一个线程进行数据库的操作访问,多的直接排队等待,(单本版本可以用本地锁ReentrantLock,集群服务使用分布式锁),可以解决雪崩效应,但会影响吞量。

  2. 使用消息中间方式

    通过消息中间件让访问排队,加载缓存,只要不让并发一下子全部打在数据库上面,就好办,效果是第一次访问返回空数据,刷新或刷新几次后展示数据

  3. 使用数据库的二级缓存,使用ehcache实现二级缓存

  4. 均摊分配redis key的失效时间,只要不要集中在一点就好,以几分钟的随机数让缓存错峰失效

  5. 多缓存并用,可以用多个缓存, 如redis缓存和memcache缓存并用,或者部署两套redis集群。

  6. 通过限流等手段

缓存穿透的解决方案
  1. 定义参数规则,如果参数不符合规则直接抛异常,常见的如对外提供的接口,参数应该是大于0的,如果一直传小于等于0的参数,直接返回错误
  2. 数据库中查不到数据的时候,向缓存放一个空对象,再从缓存中获取数据,获取的就是空对象从而不继续走库
缓存击穿的解决方案

限流、二级缓存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值