更新操作
如果先更新数据库再更新缓存
-
先更新缓存再更新数据库
更新缓存为1
更新缓存尾2
更新数据库为2
更新数据库为1
那么最后缓存为2
数据库为1
数据不一致 -
先更新数据库,再更新缓存
数据库为1
数据库为2
缓存为2
缓存为1
还是不一致
于是这种情况我们改为将缓存删除
- 先删除缓存,再更新数据库
删除缓存
读缓存,未命中
写回缓存
更新数据库
这样也会数据不一致
4.先更新数据库,再删除缓存
读缓存
读到的是以前缓存
更新数据库
删除缓存
写回
这也会数据不一致
但是这种几率比较小
因为先写回的速度要快于更新数据库
就是先更新数据库再删除缓存
先删除缓存再更新数据库会有问题码?
先删除缓存,然后这时候另外一个线程没读到,就会读取数据库然后写回缓存,然后数据库更新之后,就数据不一致了
然后后删除,因为先更新数据库,那么即使读取数据,没有读到,读数据库,就会写回到缓存,然数据库更新之后,会把这个写回值删除掉,由于更新数据库的速度比较慢,所以并不会写回在删除之后
说说缓存更新策略
旁路缓存
就是最常用的我们先更新数据库,然后再删除缓存
然后读的时候命中了直接返回吗,没命中的话,我们就读数据库,然后写回缓存
写穿/读穿
就是写到数据库的时候就写到缓存中去
写回
在cpu中,就是只写在缓存中,只有cache满了要被替换的时候才写道内存中