redis缓存穿透和雪崩

缓存雪崩

定义

缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期,或者缓存宕机),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。

一般主站不会直接查库,而是调用第三方http、dubbo接口。这同样会对下游造成影响。

解决方案

事前:

缓存高可用,解决宕机导致雪崩
一般的缓存都是定时任务刷进去的,定时任务的执行时间间隔需小于缓存过期时间

事中:

请求限流,防止DB打挂或者下游系统被打挂

事后:

尽快恢复缓存:redis恢复加载持久化数据、执行定时任务恢复热点数据

缓存穿透

定义

正常情况下,我们去查询数据都是存在。那么请求去查询一条压根儿数据库中根本就不存在的数据,也就是缓存和数据库都查询不到这条数据,但是请求每次都会打到数据库上面去。这种查询不存在数据的现象我们称为缓存穿透。

解决方案

缓存空值

在数据库中查不到时,先缓存空值,但是过期时间可以设置的稍微短一些。及时更新。

BloomFilter

可以在查询缓存前取BloomFilter查询key是否存在,如果不存在直接返回,存在再去查找缓存→DB (单机guava BloomFilter,分布式使用redis bitmap实现BloomFilter)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容