先删缓存,再更新数据库
先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不一致发生。

解决方案
延时双删
为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数据库之后,再 Sleep 一段时间,然后再次删除缓存。
Sleep 的时间要对业务读写缓存的时间做出评估,Sleep 时间大于读写缓存的时间即可。
流程如下:
- 线程1删除缓存,然后去更新数据库。
- 线程2来读缓存,发现缓存已经被删除,所以直接从数据库中读取,这时候由于线程1还没有更新完成,所以读到的是旧值,然后把旧值写入缓存。
- 线程1,根据估算的时间,Sleep,由于 Sleep 的时间大于线程2读数据+写缓存的时间,所以缓存被再次删除。
- 如果还有其他线程来读取缓存的话,就会再次从数据库中读取到最新值。
sleep时间不好设置 建议异步串行化删除,即删除请求入队列
异步删除对线上业务无影响,串行化处理保障并发情况下正确删除。

先更新数据库,再删除缓存
更新数据库成功,如果删除缓存失败或者还没有来得及删除,那么,其他线程从缓存中读取到的就是旧值,还是会发生不一致。对于不是强一致性要求的业务,可以容忍。(不能容忍:比如秒杀业务、库存服务等。)
解决方案
消息队列
先更新数据库,成功后往消息队列发消息,消费到消息后再删除缓存,借助消息队列的重试机制来实现,达到最终一致性的效果。
问题
- 引入消息中间件之后,问题更复杂了,怎么保证消息不丢失更麻烦。
- 就算更新数据库和删除缓存都没有发生问题,消息的延迟也会带来短暂的不一致性,不过这个延迟相对来说还是可以接受的。
进阶版消息队列
为了解决缓存一致性的问题单独引入一个消息队列,太复杂了。一般大公司本身都会有监听 binlog 消息的消息队列存在,主要是为了做一些核对的工作。
可以借助监听 binlog 的消息队列来做删除缓存的操作。这样做的好处是,不用你自己引入,侵入到你的业务代码中,中间件帮你做了解耦,同时,中间件的这个东西本身就保证了高可用。
当然,这样消息延迟的问题依然存在,但是相比单纯引入消息队列的做法更好一点。
如果并发不是特别高的话,这种做法的实时性和一致性都还算可以接受的。
其他解决方案
设置缓存过期时间
每次放入缓存的时候,设置一个过期时间,比如5分钟,以后的操作只修改数据库,不操作缓存,等待缓存超时后从数据库重新读取。一致性要求不是很高的情况,可以采用这种方案。
这个方案还会有另外一个问题,就是如果数据更新的特别频繁,不一致性的问题就很大了。
为什么是删除,而不是更新缓存?
我们以先更新数据库,再删除缓存来举例。
如果是更新的话,那就是先更新数据库,再更新缓存。
举个例子:如果数据库 1 小时内更新了 1000 次,那么缓存也要更新 1000 次,但是这个缓存可能在1小时内只被读取了 1 次,那么这 1000 次的更新有必要吗?
反过来,如果是删除的话,就算数据库更新了 1000 次,那么也只是做了 1 次缓存删除,只有当缓存真正被读取的时候才去数据库加载。
结论:
总的来说更推荐先写数据库 再删缓存
● 实时一致性方案:采用“先写 MySQL,再删除 Redis”的策略,这种情况虽然也会存在两者不一致,但是需要满足的条件有点苛刻,所以是满足实时性条件下,能尽量满足一致性的最优解。
● 最终一致性方案:采用“先写 MySQL,通过 Binlog,异步更新 Redis”,可以通过 Binlog,结合消息队列异步更新 Redis,是最终一致性的最优解。








This discussion on asynchronous serialization is spot-on. It highlights a crucial architectural shift: moving from timing-based fixes (like Sleep) to process-based guarantees. This principle of reliable, sequential processing is vital not just for cache, but for any complex digital service, ensuring integrity across all touchpoints, whether it’s system architecture or even user experience on platforms like 2026jl link. Great insight!
Interesting read! Understanding player onboarding is key, especially in competitive markets. Seems platforms like 68win app download are focusing on streamlined access & security – vital for trust & retention. Good analysis!
Interesting read! The focus on secure access and easy funding, like with GCash, really stands out. Makes exploring options like a 21jl login link much smoother. Great insights into modern gaming experiences!
Solid article! Thinking about bankroll management & game selection is key for long-term success. Platforms like bigbunny slot download offer tools to analyze your play – a real edge for serious players! Definitely worth checking out their strategic resources.
xss