什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?

缓存雪崩:在一个时间段内,有大量的key过期,或者Redis服务宕机,导致大量的请求到达数据库,带来巨大压力

  • 给key设置不同的TTL、利用Redis集群提高服务的高可用性、添加多级缓存、添加降级流策略

缓存击穿:给某一个key设置了过期时间,当key过期的时间,恰好这个时间点有大量的并发请求访问这个key,可能会瞬间把数据库压垮

  • 互斥锁:缓存失败时,只允许一个请求去加载数据并更新缓存,其他请求阻塞等待

  • 逻辑过期时间:不给key设置过期时间,而是添加一个逻辑过期时间字段,查询缓存发现逻辑过期时间已过期时,再获取互斥锁,如果获取成功,则开启一个新线程去查询数据并更新缓存,失败则返回过期数据

缓存穿透;访问一个不存在的数据,在数据库没有读取到也不会直接写入缓存,导致每次请求都到达数据库,带来压力

  • 缓存空数据:查询返回的数据为空,仍然将空数据缓存;实现简单、消耗内存

  • 布隆过滤器:将可能存在的数据哈希到一个足够大的bitmap,可以过滤掉一些不存在的数据,避免了DB的查询

缓存预热:在系统启动或缓存失效后,提前将部分数据加载到Redis缓存中,提高系统的响应速度和性能

相关推荐
idingzhi4 分钟前
A股量化策略日报(2026年05月22日)
android·开发语言·python·kotlin
金銀銅鐵16 分钟前
[Java] 如何理解 class 文件中字段的 access flags?
java·后端
小短腿的代码世界24 分钟前
Qt国际化深度解析:从源码到企业级多语言实践
java·数据库·qt
江上清风山间明月30 分钟前
如何将python开发的window应用打包成exe
开发语言·python·exe·打包
ElevenS_it18830 分钟前
Redis监控实战:内存使用+命中率+连接数三类核心指标接入Zabbix+分级告警完整配置方案
运维·网络·redis·mybatis·zabbix
凌冰_33 分钟前
IDEA 集成Claude Code
java·ide
SXJR36 分钟前
Java中的Cross-Encoder模型解决方案
java·开发语言
彦为君1 小时前
JavaSE-11-BIO/NIO/AIO(多人聊天室)
java·开发语言·python·ai·nio
为何创造硅基生物1 小时前
C 语言 typedef 结构体私有化
c语言·开发语言·算法
计算机安禾1 小时前
【c++面向对象编程】第43篇:可变参数模板(C++11):优雅处理不定长参数
java·开发语言·c++