项目中用到了Redis做缓存,如何保证数据库和缓存数据的一致性?(redis如何与最新的数据保持一致)
项目中用到了Redis做缓存,如何保证数据库和缓存数据的一致性?
1 不建议缓存和数据库强一致

(1) 在缓存作为提升系统性能手段的背景下,不需要保证数据库和缓存的强一致性。如果非要保证二者的强一致性,会增大系统的复杂度
(2) 如果更新数据库成功,再更新缓存。此时存在两种情况:更新缓存成功则万事大吉。更新缓存失败,没有关系,等待缓存失效,此处要合理设置失效时间
(3) 如果更新数据库失败,则操作失败,重试或者等待用户重新发起

(4) 数据库是持久化数据,是操作成功还是失败的判断依据。缓存是提升性能的手段,允许短时间和数据库的不一致
(5) 在互联网架构中,很少追求强一致性,一般都是追求最终一致性
2 问题本质

如果非要保证缓存和数据库的一致性,本质上是在解决分布式一致性问题。
分布式一致性问题解决方案有很多,可以选择比如两阶段提交,TCC,本地消息表,MQ事务性消息等方案。
本回答摘自我的头条文章《到底是先更新缓存,还是先更新数据库》请您参考
敬请关注
请点击关注按钮【IT徐胖子】会持续为大家奉献互联网和技术干货内容,感谢支持
这个开发实际开发中还是常见的
方案一:添加过期时间,不过还是有延迟的,有校时间内还会读取,无法一致性。
方案二:定时的Task把数据查询结果,提前写入缓存,但是即使这样还是有延迟。
方案三:在任何数据操作,增删改查前,清理缓存,同时重新缓存最新的副本。
最终方案:方案出二和方案三组合使用。
希望的回答有所帮助?
推荐一款好用的数据一致性校验工具
1. NineData 官网地址:https://www.ninedata.cloud/compare
NineData 是玖章算术旗下的多云数据管理平台,它是一款即开即用的数据管理SAAS服务。当前NineData 已经支持数十种常见同异构数据源(MySQL、SQLServer、CK等)之间的结构对比、数据对比及数据订正能力。NineData结构及数据对比作为独立服务,可以灵活支持IDC、云主机自建及云托管数据源的数据一致性校验及快速修复。从使用体验、产品能力、稳定性及性能等维度综合来看,NineData是一款综合实力比较强、比较难得的校验工具。
NineData,即开即用的数据一致性校验服务
正如前面所述的推荐指数来看,NineData提供的结构对比、数据对比功能确实是综合实力比较强,也比较推荐的一款产品。除了基础的全量对比外,NineData还提供了快速对比、周期性对比及不一致复检等多种对比形态。
- 快速对比,相较于全量对比,快速对比主要用以校验窗口期比较短的情况。快速对比会对数据量、数据分布进行校验,同时会随机抽样一定的比例进行校验。
- 周期性对比,自定义对比频率及对比方式,NineData会自动周期性调度对比任务进行结构及数据对比。小编理解这个功能应该用于长期数据复制场景的数据对比,例如主从复制、数据容灾、数据多活或数据仓库实时集成等场景。
- 不一致复检,即针对上一次对比结果中不一致数据进行重新复检。这个功能主要应用于数据订正、主从复制【主从延迟】场景下,进行快速的复检。
先举两个例子,都是我做过的项目,应用场景都非常简单:
曾经做过的一个保费试算的项目,业务场景是根据用户基本信息+费率做计算,得到一个保费值,如果不了解这个业务场景的话,可以看做【用户输入】+【数据库数据】+【一定的计算】=【结果】;这些数据复杂而且多,使用频繁,但是每个产品的费率数据,几乎是不会改变的(新增修改删除都不会有):这些数据被我们放在Redis中,而且设置成永不失效;因为数据不会修改,那么数据库和缓存中的数据肯定是一样的。
现在做的项目中的一个功能,简单描述业务场景:系统从N个业务系统中抽取数据,并做加工整合,加工完成后更新到数据库中;这个场景也比较有特点,数据时效性要求很低(数据加工到数据库已经晚了一天),数据变化的时间固定且唯一(批处理每天固定时间进行,只有一个批处理线程在跑);于是我们采用了一个比较保守的策略,就是设置数据在Redis中的过期时间;等数据过期后,当查询的时候发现数据不在缓存中,再从数据库中查询出来后放入缓存。
现在想一想Redis中数据的更新策略有哪些(或者说缓存更新策略)?
先更新数据库,再更新缓存:有两个比较大的问题,一是多线程的时候,可能会造成数据库和缓存数据的不一致,而且这个不一致可能会是长期的。二是如果更新操作比较多的话,会频繁地更新缓存。
先删缓存,再更新数据库:这个会出现问题,还是A/B两个线程,如果A删除了缓存之后,在更新数据库之前,B过来查询不到缓存,于是就查询了数据库(A还没更新),把数据写入缓存,这时候A才把数据库更新掉,这可能就会造成永久性的不一致。
先更新数据库,再删缓存:一样的道理,大家可以自己想一想这个过程。
有些人可能觉得这个概率很小,怎么可能有这么巧的事情,恰好都是A做到一半,B插进来把全部的事情做完,A再去做后一半的操作;但是概率小,也是可能发生的,不得不考虑。
到此,以上就是小编对于redis如何与最新的数据保持一致的问题就介绍到这了,希望这1点解答对大家有用。