什么是redis缓存穿透,缓存雪崩,缓存击穿

本文深入探讨了缓存系统中常见的三大问题:缓存穿透、缓存雪崩和缓存击穿,分析了这些问题产生的原因及对数据库带来的压力,并提出了有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.缓存穿透
缓存穿透是指查询数据库中一定不存在的数据,我们正常的操作流程,在查询数据库前,先去查询缓存,如果key不存在或者key过期失效,再去查询数据库,并把查询到的对象放到缓存中,如果查询到的数据为null,不添加缓存。

代码流程

  • 查询前先查询缓存,如果查询对象问空,查询数据库,返回对象,存入缓存
  • 如果查询对象不为空,返回对象
  • 我们缓存的key一般通过主键进行命名,主键是自增唯一的,那么我们试想下,我们传参为-1,缓存中为空,然后查询数据库,数据库也为空,不记录在缓存。那么这样循环下来,就会导致越过缓存一直对数据库进行访问,对数据库造成压力。
  • 解决方案:可以通过在查询到的数据为空的时候依然添加缓存,设置缓存时长。

二.缓存雪崩
缓存雪崩可以理解为在某个时间段,缓存集中过期,然后这段时间出现高并发,缓存中查询不到key,所有压力集中在数据库。 缓存集中过期还不是致命的,致命的比如缓存服务节点宕机,这时候对数据库造成的压力是不可预估的。
解决方案:
可以根据数据的热门,冷门进行分类,分类设置缓存时长

三.缓存击穿
缓存击穿的对一个key一直进行高并发持续输出,当这个key在缓存失效的一瞬间,所有并发涌向数据库,一瞬间对数据库进行击穿。
解决方案:对于这种超级爆款的数据就设置永久不过期好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值