【面经】常见的Redis缓存问题有哪些?如何解决

文章探讨了Redis缓存中的常见问题,如缓存穿透、缓存击穿和缓存雪崩,提供了相应的解决办法,包括设置空结果、随机过期时间、双层缓存结构和使用互斥锁等。此外,还提及了预热、定时更新和合理设置过期时间的管理策略。
摘要由CSDN通过智能技术生成

缓存穿透

指查询一个不存在的数据,由于缓存中没有数据,所以这个查询请求会直接穿过缓存层,到达数据库层,造成了数据库的压力。攻击者可以通过构造恶意请求,使得缓存层无法命中任何数据,从而导致请求直接访问数据库,从而引起数据库压力过大。

缓存穿透-解决办法:在缓存中存储空结果的键,可以避免缓存穿透;或者使用延迟双写,在查询到数据库不存在该数据时,在缓存中也写入一个空结果的占位符,设置较短的过期时间。

缓存击穿

指缓存中某个热点数据失效,此时有大量并发请求同时访问这个失效的数据,导致这些请求直接访问数据库,造成数据库压力过大,甚至导致数据库崩溃。

缓存击穿-解决办法:可以设置热点数据的过期时间为随机时间,避免在同一时间大量数据同时失效;或者使用布隆过滤器(Bloom Filter)在查询前先判断查询的数据是否存在。

缓存雪崩

指缓存中大量的数据同时失效,导致大量请求直接访问数据库,造成数据库压力过大。
通常是由于缓存中大量的数据在同一时间失效,导致大量请求直接访问数据库。

缓存雪崩-解决办法:可以设置数据的过期时间为随机时间,避免大量数据在同一时间失效;或者设置缓存永不过期


除了缓存穿透、缓存击穿 和缓存雪崩,Redis缓存还可能遇到其他问题,例如:

缓存预热:

在系统上线后,需要将相关的缓存数据直接加载到缓存系统,以避免在后续的请求中需要查询数据库。可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存不同的key。

定时更新缓存策略:

对于实效性要求不高的缓存,可以使用定时任务更新或移除缓存。

设置不同的过期时间:

让缓存失效的时间点尽量均匀,避免大量缓存数据同时过期。

双层缓存策略:

C1为原始缓存,C2为拷贝缓存,C1失效时,可以访问C2,C1缓存失效时间设置为短期,C2设置为长期。

加锁排队 mutex互斥锁解决:

Redis的SETNX去set一个mutex key,当操作返回成功时,再进行加载数据库的操作并回设缓存,否则,就重试整个get缓存的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkPet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值