浅谈Redis缓存穿透、缓存击穿、缓存雪崩

本文探讨了Redis缓存中常见的三大问题:缓存穿透、缓存击穿和缓存雪崩,介绍了各自的原因、场景以及针对性的解决方案,包括使用空数据缓存、布隆过滤器、互斥锁和多级缓存策略等。

引言

我们都知道,缓存固然好,省流量,速度快,但缓存也有“不行”的时候,Redis作为一个缓存数据库也存在这三大缓存问题。

缓存穿透

原因及场景

简单来说就是查询缓存和底层DB中都不存在数据,而用户却不断的发起请求,在流量高峰的时候,就特别容易使DB崩溃。

解决方案

  • 直接缓存空数据,如下用户一直请求id为1234的数据,缓存和DB中并没有这条数据,直接在缓存NULL。如图操作

  •  添加布隆过滤器,实现复杂,存在误判率(本人不经常使用)。

缓存击穿

原因及场景

一般场景就是缓存中某一个Key过期的瞬间,对这个Key发生了大量的请求,缓存中没有数据,大量请求去读底层DB,可能会把底层数据库压垮。

解决方案

  • 对数据有强一致的需求,添加互斥锁,对请求中的某一个线程上互斥锁,在该线程拿到锁的时候添加缓存。大致意思就是,一个人说,你们先稍息,听我讲话看我操作,然后其余人再操作。这种方案,性能较差,但是数据一致。

  • 对热点缓存不设置过期时间,性能优,高可用,数据一致性差。

缓存雪崩

原因及场景

缓存雪崩存在着严重的偶然性,意思就是同一时间内动量的缓存key同时失效或者redis服务宕机。

解决方案

  • 给Key设置过期时间时使用随机值。
  • 利用Redis集群,采用哨兵模式或者集群模式,提高服务的可用性。
  • 添加多级缓存
  • 设置热点数据永不过期一定程度上也可以解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值