Redis的双写问题
双写的情况下,是先操作数据库还是先操作缓存呢?
在Cache-Aside缓存模式中,有些小伙伴会有疑问,在写入请求的时候,为什么是先操作数据库呢?为什么不先操作缓存呢?
假设有A、B两个请求,请求A做更新操作,请求B做查询读操作。
A、B两个流程如下:
- 线程A发起一个写操作,第一步del cache
- 此时线程B发起一个读操作,cache miss
- 线程B继续读DB,读出来一个老数据
- 然后线程B把老数据设置入缓存
- 线程A写入DB最新的数据
这种情况,就出现数据不一致的问题了。因此,Cache-Aside缓存模式,选择了先操作数据库而不是先操作缓存。