如何保证缓存和数据库数据一致性呢?
1 先删除缓存 再更新数据库
- 线程1删除缓存
- 线程2查询数据 缓存没有命中, 从数据库load数据放到缓存
- 线程1更新数据库.
后续的查询一直走老的数据.
2 先更新数据库 再删除缓存.
- 线程1 更新数据库
- 线程2 查询数据 老的缓存
- 线程1 删除缓存
后续的查询 走新的数据
极端情况下也有问题
- 线程1 查询数据 没有命中缓存 查询数据库
- 线程2 更新数据库 删除缓存
- 线程1 把数据库数据放入缓存.
概率比较低
线程1 恰好没有命中缓存. 同时一个并发写请求.
线程2个更新数据库删除缓存 恰好在线程1查询数据库之后