Redis缓存穿透,缓存击穿和缓存雪崩的发生和解决方法

文章讲述了缓存系统中的三种常见问题:缓存穿透、缓存击穿和缓存雪崩,以及针对这些问题的解决策略。缓存穿透是查询不存在的数据,解决方案包括接口校验和基础数据验证;缓存击穿是缓存过期导致大量请求数据库,解决办法有设置热点数据永不过期和限流控制;缓存雪崩是大量缓存同时过期,解决措施包括设置随机过期时间和分布式缓存策略。

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

1.缓存穿透:是指一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查询数据库,最后返回空。当用户使用这条不存在的数据疯狂发起查询请求的时候,对数据库造成的压力就非常大,甚至可能直接挂掉。用户进行请求,这意味着永远不会请求到该数据。如发起id=-1的数据请求或者一个id特别大都是不存在的数据,这相当于对服务器进行攻击。

解决方法:

接口层进行校验,如加用户权限校验和id的基础校验,用户没有登陆的无权请求,id<=0的直接拦截。

2.缓存击穿:是指缓存中没有但是数据库存在的数据(一般是缓存时间到期),是在并发用户的情况下发生大量请求,缓存中数据过期导致大量用户同一时间去查询数据库,造成数据库压力过大的情况。

解决方法:

1.设置热点数据永不过期
2.对服务接口进行限流、降级和熔断控制。如果服务请求量过多,进行限流和服务熔断,最后进行服务降级,快速返回服务响应。
3.加互斥锁

3.缓存雪崩:是指缓存大批量数据过期,用户并发访问大量数据,导致数据库压力过大甚至宕机。

它跟缓存击穿不同的是,缓存击穿是大量用户请求同一条数据;缓存雪崩是大量用户请求不同的数据,而且大量数据缓存已过期,只能请求数据库,导致数据库压力大增。

解决方法:

1.数据缓存的过期时间设置随机时间,防止大量缓存数据在同一时间过期;
2.设置热点数据永不过期。
3.如果缓存数据库是分布式部署,将热点数据均匀分布在不同的缓存数据库中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值