如果是一读(线程B)一写(线程A)操作,「先操作缓存,再操作数据库」。流程图如下所示:
1.线程A发起一个写操作,第一步del cache
2.线程A第二步写入新数据到DB
3.线程B发起一个读操作,cache miss缓存失效了。
4.线程B从DB获取最新数据
5.线程B执行set cache,把从DB读到的数据,更新到缓存。
「这样看,没啥问题」。我们再看第二个流程图,如下:
2.此时线程B发起一个读操作,cache miss
3.线程B继续读DB,读出来一个老数据
4.然后老数据设置入cache
5.线程A写入DB最新的数据
OK,酱紫,就有问题了吧,老数据入到缓存了,「每次读都是老数据啦,缓存与数据与数据库数据不一致了」