Redis 缓存穿透/缓存击穿/缓存雪崩

本文介绍了缓存穿透、缓存击穿和缓存雪崩的概念及其解决方案。缓存穿透可通过接口校验和缓存空值来避免;缓存击穿可以通过加互斥锁或设置热点数据不过期来解决;缓存雪崩则可以采用过期时间打散、热点数据不过期和加锁策略来缓解数据库压力。这些方法对于确保系统稳定性和性能至关重要。
摘要由CSDN通过智能技术生成

缓存穿透

概念

缓存穿透是指用户大量请求缓存、数据库没有的数据,导致没有办法更新缓存,每一次的请求都会到数据库上,导致数据库压力过大

解决方案

  • 接口校验

    在接口对鉴权、数据合法性进行校验,这往往事考虑出现恶意攻击的情况

  • 缓存空值

    将空数据写入到缓存之中,下次就会直接获取缓存的内容

  • 布隆过滤器

    布隆过滤器存储所有可能访问的 key,不存在的 key 直接被过滤,存在的 key 则再进一步查询缓存和数据库

缓存击穿

概念

缓存击穿是指缓存中没有但数据库中有的数据,在缓存当中常常没读到数据而去数据库取数据引起数据库压力过大,这种情况通常是因为缓存内容过期导致

解决方案

  • 加互斥锁

加锁的意义就在与每一次都只会有一个请求线程到数据库获取进行查询,但是也可以做取舍,例如:单台服务器的话完全可是使用JVM层级的锁,多台服务器就需要考虑分布式锁(Redis锁/Zookeeper锁)了

  • 热点数据设置不过期

直接将热点数据设置不过期是最简单粗暴的方式,需要考虑异常处理与刷新时间间隔,否则会一直获取不到最新的数据

缓存雪崩

概念

缓存中数据大批量到过期时间,同时大量请求直接到数据库,引起数据库压力过大

与缓存击穿的区别

缓存击穿是单条数据,缓存雪崩是多条数据同时过期

解决方案

  • 过期时间打散

通过给缓存过期时间加上一个随机值的方式,使得不在同一时间过期

  • 热点数据不过期

直接将热点数据设置不过期是最简单粗暴的方式,需要考虑异常处理与刷新时间间隔,否则会一直获取不到最新的数据

  • 加互斥锁

加锁的意义就在与每一次都只会有一个请求线程到数据库获取进行查询,但是也可以做取舍,例如:单台服务器的话完全可是使用JVM层级的锁,多台服务器就需要考虑分布式锁(Redis锁/Zookeeper锁)了

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值