推荐学习:redis视频教程
如果是更新,存在分布式事务问题,可能出现修改了缓存,数据库修改失败的情况。只是删除缓存的话,就算数据库修改失败,下次查询会直接取数据库的数据,也不会出现脏数据。
就是在增删改某实体类的时候,要对该实体类的缓存进行清空,清空的位置在数据库操作方法的前后。
只先删

只后删
从而得出 前删和后删都有问题。所以采用延时双删的策略
依然是反证法。下图这情况是双删依然存在旧缓存的情况,延时是确保 修改数据库-》清空缓存前,其他事务的更改缓存操作已经执行完。
补充:为什么要延迟双删,来保证缓存一致性
为什么要延迟双删,来保证缓存一致性
根据综合考虑,即使先修改数据库,在删除缓存,有一定的时间会导致读取到旧数据,这通常是可以被忍受的。
只要及时将缓存删除,其他线程就可以读取到最新的值。
如果在mq中消息没有被重复消费,还会交由给其他消费者消费(将缓存删除)
推荐学习:redis视频教程
以上就是原因分析之redis缓存延时双删的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号