Redis 缓存读写策略¶
Redis 缓存读写策略有三种主流模式:Cache Aside(旁路缓存)、Read/Write Through(读写穿透)和 Write Behind(异步缓存写入),用于平衡性能、一致性和复杂度。
Cache Aside(旁路缓存)
-
最常用模式,适合读多写少场景。读:先查缓存,未命中查 DB 并回写;写:先更新 DB,再删缓存(失效更新)。 + 为什么这样?删缓存而非更新避免脏数据(写后读旧缓存),但有短暂不一致风险(概率低,因缓存快)。Java 示例用 @CacheEvict 或手动 redisTemplate.delete()。
Read/Write Through(读写穿透)
-
缓存作为主存储,读:缓存 miss 时缓存服务自动从 DB 加载;写:缓存同步更新 DB(Write Through)。
-
为什么?对应用透明,简化代码,但 Redis 不支持(无 DB 同步),性能稍低(同步阻塞)。适合本地缓存,分布式少见。
Write Behind(异步写入)
-
写只更新缓存,异步批量同步 DB(如点赞量)。读同 Cache Aside。
- 为什么高效?DB 压力低(批量写),但一致性弱(缓存挂掉数据丢失)。用在浏览量等最终一致场景,MySQL Buffer Pool 类似。
策略对比
| 策略 | 读流程 | 写流程 | 优点 | 缺点 | 适用 |
|---|---|---|---|---|---|
| Cache Aside | 缓存→DB回填 | DB更新+删缓存 | 简单、高性能 | 短暂不一致、首次 miss | 读多写少(如用户信息)javaguide |
| Read/Write Through | 缓存(自动穿透 DB) | 缓存同步 DB | 一致性强、透明 | 写延迟高、不支持 Redis | 强一致读写javaguide |
| Write Behind | 同 Aside | 缓存异步 DB | 写吞吐高 | 不一致风险大 | 写频繁、弱一致(如计数)javaguide |
实际项目:优先 Cache Aside + 分布式锁/ Canal 双写一致;热点数据预热提升命中率。