缓存更新方法
-
先删缓存,再更新数据库
- 有问题,不能采用
- 如果删了缓存后,刚好有一个并发查询过来,缓存没有,从数据库拿到了旧数据,更新到缓存中
- 这样就导致了脏数据
- 有问题,不能采用
-
先更新数据库,再删缓存
- 业界常用方案
- 但也有一点点问题,但发生概率极小
- 当缓存初始值是空或者失效时,刚好有一个并发查询过来,缓存没有,从数据库拿到了旧数据,在写操作写完新数据,并删除缓存后,这个并发请求才更新到缓存中
- 这样就导致了脏数据
-
先更新数据库,再更新缓存
- 有更好的读性能,但写性能较低
- 可以避免缓存穿透
- 也有一点问题
- 如果两个并发写操作,一个更新了数据库,另一个接着更新数据库,然后又更新缓存,前一个才更新到缓存中。
- 这样就导致脏数据
-
read/write through缓存代理
- 由缓存层统一代理数据库的读写
- 读数据时,若缓存未命中,会自动去数据库加载数据到缓存,然后交给应用
- 写数据时,更新完缓存后,再同步写数据库
- 由缓存层统一代理数据库的读写
-
write back写回
- 更新数据时,只更新缓存,不更新数据库
- 缓存会异步批量地更新数据库
- 无法保证数据的强一致性,而且会存在数据丢失的可能