一、不一致的原因分析
1. 缓存更新策略不当
-
先更新数据库后删除缓存:删除缓存失败会导致不一致
-
先删除缓存后更新数据库:并发请求可能导致不一致
-
缓存穿透:大量请求直接打到数据库,绕过缓存
2. 并发操作问题
-
读写并发:读请求获取旧缓存时,写请求更新了数据库但未更新缓存
-
写写并发:多个写请求导致执行顺序不确定
3. 数据更新失败
-
缓存更新成功但数据库更新失败
-
数据库更新成功但缓存更新失败
4. 缓存过期策略
-
缓存过期后,大量请求同时触发数据库查询(缓存击穿)
-
缓存雪崩导致大量请求直接访问数据库
5. 异步处理延迟
-
使用消息队列异步更新缓存时存在延迟
-
数据库主从同步延迟导致读取从库数据不一致
二、解决方案
1. 缓存更新策略优化
(1) Cache Aside Pattern (旁路缓存模式) - 推荐
// 读操作 public Data getData(Long id) {// 1. 先读缓存Data data = redis.get(id);if (data != null) {return