Redis 缓存击穿、穿透、雪崩

1. 缓存击穿

问题描述: 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又都去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。

解决策略

  • 设置热点数据永不过期:对于经常被访问的热点数据,可以将其缓存时间设置为永不过期。

  • 加互斥锁:在访问缓存之前,先使用分布式锁或其他并发控制手段,确保只有一个线程或进程去数据库查询,并将结果更新到缓存中,其他线程或进程则等待缓存更新后访问。

2. 缓存穿透

问题描述: 缓存穿透是指用户查询数据,在数据库没有,缓存中自然也不会有。但用户仍然不断发起请求,以不存在的数据去访问缓存,导致缓存被多次访问数据库,压力骤增。

解决策略

  • 布隆过滤器(Bloom Filter):对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力。

  • 缓存空结果:当查询数据库为空时,也将这个空结果进行缓存,并设置较短的过期时间。这样当再次查询该数据时,可以直接返回缓存中的空结果,避免了对数据库的查询。

3. 缓存雪崩

问题描述: 缓存雪崩是指在某一个时间段,缓存集中过期失效。在这个时间段内,对缓存中的所有key的访问都会落在DB上,造成DB访问量骤增,引起DB压力瞬间增大,甚至导致DB宕机。

解决策略

  • 设置过期时间时加上一个随机值:这样可以避免大量缓存同时失效。

  • 双缓存策略:准备两个缓存,A和B。A的过期时间比B短。A缓存失效后,请求会走到B缓存。B缓存再作为兜底数据来请求数据库。

  • 后台更新缓存:对于即将过期的缓存,通过后台任务来提前刷新缓存,避免缓存过期时间过于集中。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值