更新数据库后删除缓存是常见思路,但并发读取、失败和延迟仍可能产生旧值。设计缓存一致性时,首先要明确业务能接受多少陈旧,而不是承诺任何时刻都绝对一致。
不同数据采用不同目标
展示性资料与交易判断的要求不同。关键决策可能需要读取权威数据,缓存只承担部分加速。为每类数据记录更新时间、允许延迟与错误后果,避免所有对象使用同一策略。
写入与失效都可能失败
数据库成功而缓存失效失败时,需要可恢复机制;读取旧数据后又写入缓存,也可能覆盖更新效果。根据风险评估版本标识、受控刷新或补偿任务,而不是依赖单次删除总会成功。
多级缓存增加传播边界
进程内缓存与 Redis 并存时,每个实例可能看到不同版本。新增本地缓存前,应说明失效传播、容量和故障行为。一个实例手工清理成功,不代表全站已经一致。
验收并发更新与恢复
同时执行读取、修改和缓存失效,观察是否出现不可接受的旧值;模拟缓存不可用后再恢复,检查旧数据不会长期存在。验收标准应使用业务约定的陈旧范围。
常见问题:缩短过期时间就能保证一致吗?
它可以限制部分旧值持续时间,但不能解决全部并发与失败问题,还会增加回源压力。
技术参考:微软:Cache-Aside 模式。具体接口与配置请结合使用版本核对。
将评估落实到你的系统
如果内部团队需要把这些约定落到可运行的工程中,可以通过微服务基础架构建设沟通接口、公共能力与交接范围,先以一个业务场景验证方案。