使用缓存的时候,我们需要关注Redis与DB数据的一致性。如果Redis缓存与DB数据不一致,就可能导致用户一直只能获取到数据错误的缓存,严重影响用户体验。那如何让Redis与DB数据一致性呢?
如何保证数据库和缓存的一致性
首先我们来讨论几个更新时的方案吧,我将从各个方案进行剖析,让你知道这些方案会出现的问题,并且最终会得出如何保证数据库和缓存的一致性。(使用的图解皆来源于网络)
先更新缓存再更新数据库
我们来举个例子,在并发情况下,请求A 和 请求B 两个请求,同时更新同一个数据时,什么样的执行流程会导致数据不一致。
如图,如果请求A先更新了缓存(值为1),请求B在它之后也更新了缓存(值为2),然后请求B继续执行,把数据库更新为2,之后请求A也继续执行,把数据库更新为1。
此时,缓存的值为2,数据库的值为1。很明显,出现了缓存不一致的情况。那我们再换一种思路试试看?
先更新数据库再更新缓存
我们也来分析一下这种情况下,什么样的顺序会出现缓存不一致。
请求A把数据库数据更