在“本地缓存(如 Guava/Caffeine) + 分布式缓存(如 Redis)”的多级缓存架构中,保证一致性的核心难点在于:当数据发生更新时,如何通知所有应用节点清空其内存中的本地缓存。 因为 Redis 是共享的,而本地缓存是分布在各个应用服务器进程内的。 通常,保证这两级缓存与数据库之间一致性的方案有以下几种,按业务对一致性的要求从低到高排列: --- 1. 基于 TTL(过期时间)的被动失效(最终一致性) 这是最简单、成本最低的方案。 做法:给本地缓存设置一个相对较短的过期时间(例如 5秒、10秒,或 1 分钟)。读取时先查本地,没有再查 Redis,再没有查 DB,然后依次写入 Redis 和本地缓存。更新数据时,只更新 DB 并删除 Redis。 一致性表现:在本地缓存过期之前的这段时间,应用会读到脏数据。 适用场景:对数据实时性要求不高、允许短时间不一致的场景(如首页推荐、热榜数据、字典配置等)。 2. 基于 Redis Pub/Sub(发布订阅)的主动失效 这是最常用的轻量级解决方案。利用 Redis 自带的发布订阅功能实现节点间的通信。 写入/更新流程: 1....