Redis篇—缓存三兄弟

211 阅读1分钟

穿透

访问缓存中没有,数据库中也没有的数据,感觉就像穿透了缓存层,直达数据库,可能造成数据库的宕机。

解决方案:
布隆过滤器

Snipaste_2023-12-30_10-44-47.jpg

击穿

某一热点数据的key突然过期,造成大量的请求直达数据库。

解决方案:
1.分布式锁(互斥锁):
当缓存失效时,不立即去load db,先使用Redis的setnx去设置一个互斥锁,当操作成功返回时再进行load db的操作并回设缓存,否则重试get缓存方法。
2.热点数据永不过期
3.接口限流

Snipaste_2023-12-30_10-52-46.jpg

雪崩

缓存中在同一时间有大量的key突然过期,请求查询缓存没有,直达数据库。

解决方案:
打散过期时间,随机过期时间
比如:在原有失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效事件。

赋诗一首

《缓存三兄弟》

穿透无中生有key,布隆过滤null隔离。

缓存击穿过期key,锁与非期解难题。

雪崩大量过期key,过期时间要随机。

面试必考三兄弟,可用限流来保底。