目前有四种更新缓存的策略
1.先更新数据库,再更新缓存
2.先更新数据库,再更新缓存
3.先淘汰缓存,再更新数据库
4.先更新数据库,再淘汰缓存
1.先更新数据库,再更新缓存
2.先更新缓存,再更新数据库
对于上述两种更新方案,当并发较大,同时有两个线程需要对同一个数据进行更新时,可能会出现以下问题:
方案一、先更新(update)缓存,再更新数据库
线程A更新了缓存
线程B更新了缓存
线程B更新了数据库
线程A更新了数据库
方案二、先更新数据库,再更新(update)缓存
线程A更新了数据库
线程B更新了数据库
线程B更新了缓存
线程A更新了缓存
总结一下就是,在并发大的情况下,容易出现缓存中存储的不是最后一次提交更新请求的数据。
而且当更新的逻辑比较复杂的时候,我们可能需要取数据库中的其他数据与缓存中的数据进行计算,此时缓存需要与数据库的数据进行多次交互,更新缓存的消耗太多,所以建议直接淘汰缓存。
3.先淘汰缓存,再更新数据库
在正常情况下,A、B两个线程先后对同一个数据进行读写操作:
A线程进行写操作,先淘汰缓存,再更新数据库