更新数据库后缓存不一致,先删缓存还是先写库

用先更新数据库再删缓存,不要先删缓存。

先删的话,删完之后、写库之前有个空窗,并发读会把旧值重新灌回缓存,脏数据就一直挂着了。

先写库再删,最坏也只是读到稍早的值,下一次读就被纠正。

删除失败必须兜底:把 key 投进延迟消息重试,同时给缓存设一个较短的 TTL 作为最终一致的下限。

另外别用更新缓存代替删缓存,并发的两次更新会让缓存和库长期不一致。

-- 推荐顺序
UPDATE t SET ... WHERE id = 1;
DELETE cache:key:1;

-- 删除失败时投递延迟消息重试,并让 key 自带 TTL 兜底
SET cache:key:1 <value> EX 300
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容