本文主要是介绍Redis缓存双删(使用Redis如何保证数据库和缓存之间的同步),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用Redis如何保证数据库和缓存之间的同步
通常我们有以下几种策略:
-
先修改数据库再更新缓存(不建议):该策略的问题是如果数据库更新成功了Redis 修改失败了,也会导致不同步的问题
-
先修改缓存再更新数据库(不建议):该策略的问题是,如果Redis 修改成功了,数据库没有修改成功,导致数据不一致。
-
先删除缓存再更新数据库:为了解决上述问题,使用该方式一定程度上解决了上述的问题,执行的步骤如下,假如有两个方法,update和getAndAdd一个用来更新缓存,一个用来新增缓存:
- update 首先先删除缓存,然后更新数据库
- getAndAdd 方法 首先尝试从缓存中获取数据,
- 此时由于缓存已经被删除,尝试从数据库中获取数据,并放入缓存
-
缓存双删(建议使用):使用上述方式其实还会存在一定问题,例如还是上述两个方法:
- update 方法首先先删除缓存
- getAndAdd 方法此时从Redis 中获取数据,没有获取到数据,从数据库中获取数据并放入Redis,由于此时数据库中的数据还没有更新此时获取到的数据则是旧数据
- update 方法继续更新数据库数据
- getAndAdd 第二次被调用,发现Redis 中存在数据,则没有从数据库中更新数据到Redis 当中,就导致了数据还是老数据,并非最数据
所以此时需要使用两次删除:
- update 方法首先先删除缓存
- getAndAdd 方法此时从Redis 中获取数据,没有获取到数据,从数据库中获取数据并放入Redis,由于此时数据库中的数据还没有更新此时获取到的数据则是旧数据
- update 方法继续更新数据库数据,并再次对缓存进行删除
- getAndAdd 第二次被调用,尝试从Redis 中获取不到数据,从数据库获取数据并放入到Redis中
这篇关于Redis缓存双删(使用Redis如何保证数据库和缓存之间的同步)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!