【面试经典题】缓存穿透、缓存击穿和缓存雪崩

缓存穿透

项目中使用缓存通常是先检查缓存中是否存在,如果存在就直接返回缓存中的内容,如果不存在就请求数据库,然后缓存返回的结果。
但是如果我们请求的数据如果在缓存中一直不存在,就会造成成每一次请求都请求DB,
这样缓存就失去了意义,在流量大的时候,db就可能挂掉。
要是有人利用不存在的key频繁攻击我们的应用,就存在漏洞了。

解决方案:

(1)缓存空对象,设置短暂的过期时间。
(2)布隆过滤器拦截

缓存击穿

在高并发的情况下,如果一个热点缓存失效了,可能出现多个进程同时查询db,同时设置缓存的情况。如果并发确实很大,这就可能造成db压力过大,还有缓存频繁更新的问题。

解决方案:

添加锁,尽可能减少多个线程去访问db。

缓存雪崩

高并发的情况下,平时我们设定一个缓存的缓存的过期时间时,可能会设置一分钟、5分钟,并发情况下很可能会在某一时间同时生产了很多缓存,并且过期时间都相同,当过期时间到了之后,这些缓存同时失效,请求全部转发到DB,DB压力可能就会过大。

解决方案:

随机过期时间,降低重复率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值