缓存与数据库并存时应如何控制更新顺序和不一致窗口
简答题困难337 次浏览
参考答案与解析
# 核心结论
缓存与数据库通常不能通过两次独立写入获得天然原子性,因此目标不是笼统宣称“绝对一致”,而是明确权威数据源、读写顺序、允许的不一致窗口和失败修复方式。以数据库为权威来源的读多写少系统,常用旁路缓存:读取时先查缓存,未命中再查数据库并回填;写入时先提交数据库事务,再删除缓存。删除通常比直接更新缓存稳妥,因为缓存值可能由多表聚合或计算产生,直接更新容易遗漏依赖字段或产生不同写入者之间的覆盖。
# 底层机制
“先删除缓存,再写数据库”存在典型竞态:写线程删除缓存后尚未提交数据库,读线程查询到旧数据库值并将其回填,随后写线程完成更新,旧缓存可能一直保留到过期。“先写数据库,再删除缓存”能够缩小这个窗口,但仍不是严格
