本文共 783 字,大约阅读时间需要 2 分钟。
缓存穿透、击穿与雪崩优化
一、缓存穿透
1.1 什么是缓存穿透
缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中。这种情况通常需要额外的容错机制,避免大量请求直接打击存储层,影响系统性能。
1.2 缓存穿透的原因
- 业务逻辑或数据本身出现问题
- 恶意攻击或爬虫等造成空命中
1.3 解决缓存穿透
- 缓存空结果:对于查询为空的请求,可以将结果缓存一段时间,设置较短过期时间
- 布隆过滤器:通过布隆过滤器预检数据是否存在,避免不必要的数据库查询
缓存穿透的优缺点对比
| 解决方式 | 优点 | 缺点 |
| 缓存空对象 | 代码维护简单 | 需设置合理过期时间,可能导致数据不一致,缓存空间占用较多 |
| 布隆过滤器 | 缓存空间占用少 | 代码复杂性增加,可能存在假阳性,数据变更需及时更新 |
二、缓存击穿
2.1 什么是缓存击穿
缓存击穿是指在高并发场景下,缓存失效时,多个请求同时触发数据库查询,导致数据库瞬时压力增大,严重影响系统性能。
2.2 缓存击穿的原因
- 热点数据:频繁访问的数据一旦缓存失效,会引发大量的数据库查询
- 缓存过期时间短:过期时间不足,导致短时间内大量请求同时访问数据库
2.3 如何解决缓存击穿
- 加锁机制:在请求到达时获取分布式锁(如Redis的SETNX),确保只有一次查询数据库
- 提前更新缓存:在缓存即将过期时,主动更新缓存内容
- 设置合理的过期时间:针对热点数据,延长缓存过期时间以减少频率
三、缓存雪崩
3.1 什么是缓存雪崩
缓存雪崩是指由于存储层服务中断,导致所有请求都直接打击数据库,引发数据库系统性故障。这种情况通常发生在缓存层全体失效时
3.2 如何防范缓存雪崩
- 保证缓存高可用性:采用Redis Sentinel或Cluster等高可用方案,确保缓存层服务稳定
- 双缓存架构:通过多级缓存降低缓存失效概率
- 限流与降级:对流量进行控制,在高峰期返回默认值或降级接口
转载地址:http://hpefk.baihongyu.com/