跳转至

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 双写一致;热点数据预热提升命中率。