缓存一致性方案
面试官问:"更新数据时,Redis 和数据库的更新顺序是什么?"
小陈说:"先更新数据库,再更新缓存。"
面试官追问:"如果更新数据库后 Redis 挂了,更新缓存失败了,怎么办?"
小陈说:"...重试?"
面试官继续追问:"重试失败呢?缓存和数据库不就数据不一致了?"
小陈答不上来。
缓存一致性是 Redis 面试中的高频问题。这道题能说清楚 Cache Aside 模式、延迟双删的候选人,对 Redis 和数据库的协同有实战理解。
一、三种缓存模式 🔴
1.1 Cache Aside(旁路缓存)
为什么写时删除而不是更新?
1.2 Read/Write Through
1.3 ❌ 错误示范
候选人原话:"先更新 Redis,再更新数据库。"
问题诊断:如果 Redis 更新成功但数据库更新失败,就会导致缓存是脏数据,且无法通过重新查询来修复。
候选人原话 2:"更新时同时更新 Redis 和数据库。"
问题诊断:并发场景下,如果 Redis 和数据库更新顺序不同步,可能导致数据不一致。
【面试官心理】 这道题我会从"为什么删除而不是更新"追问。能说清楚删除缓存的"安全窗口"概念的候选人,说明他理解了并发场景下的一致性问题。
二、延迟双删 🟡
2.1 延迟双删的流程
2.2 延迟双删的时序
2.3 延迟时间的设置
三、删除 vs 更新 🟡
3.1 为什么缓存通常删除而不是更新?
3.2 异步更新方案
四、生产避坑 🟢
4.1 删除缓存失败的补偿
4.2 缓存与数据库的超时设置
【面试官心理】 缓存一致性是 Redis 面试中的高级话题。能说清楚 Cache Aside、延迟双删的时序问题的候选人,说明他对分布式系统的一致性问题有深入理解。