Redis和MySQL数据一致性保证是一个复杂的问题,需要结合具体业务场景进行权衡和设计。以下是几种常见的数据同步策略及其分析,帮助你理解和实现Redis和MySQL之间的数据一致性。 1. 缓存更新策略:Cache Aside Pattern(旁路缓存模式) 场景: 在大部分业务系统中,Redis作为缓存层提升读取性能,MySQL作为持久化存储保证数据可靠性...
先更新MySQL数据,再去更新Redis缓存。 先删除Redis缓存,再去更新MySQL数据。在查询操作的时候将MySQL数据缓存到Redis缓存中。但是如果遇到高并发情况下,该方式容易出现数据不一致问题。例如,先进行了删除操作,然后更新了数据库数据,但是另外一个线程去执行了MySQL查询操作。那么就会将查询到的老数据重新更新到Reids缓存中。
「先更新数据库,再删缓存」的策略的第一步是更新数据库,那么更新数据库成功,就会产生一条变更日志,记录在 bin log 里。 于是我们就可以通过订阅 bin log 日志,拿到具体要操作的数据,然后再执行缓存删除, 把我们搭建的消费服务作为mysql的一个slave,订阅mysql的bin log日志,解析日志内容,再更新到redis。此方案和业...
第一:先更数据库再更新缓存。 第二:先删缓存,再更新数据库。 如果先更数据库再更新缓存。 如果缓存更新失败,就会导致数据库和redis中的数据是不一致的。 如果是先删除缓存再更新数据库,理想情况下是应用下次访问redis的时候发现redis里面数据是空的,那么就会从数据库加载保存到redis里面。 数据理论上是一致的。 但...
缺点: 在休眠时间内数据存在不一致,而且又增加了写请求的耗时。 2. 基于mysql binlog 日志进行异步更新缓存 基于mysql binlog 的日志进行分析,mysql 的操作都会记录在binlog 日志中,所以进行分析binlog日志中的行为,然后根据不同的行为及业务进行异步更新缓存,可以保证redis 缓存和mysql 数据库的强一致性; ...
1 缓存一致性 用户每次抢完红包,要查看自己抢红包记录,此时需要查询数据库表 money_log ,如果每次都查询 money_log 就会占用大量数据库资源。此时我们应该将数据存储到缓存中,每次查询直接从缓存获取即可。 但现在面临的问题是如果用户抢到了不同的红包,缓存没法及时更新,因此我们需要实现抢红包数据库数据和Redis缓存中...
所以,如果需要在极端情况下仍然保证Redis和Mysql的数据一致性,就只能采用最终一致性方案。 比如基于RocketMQ的可靠性消息通信,来实现最终一致性。 还可以直接通过Canal组件,监控Mysql中binlog的日志,把更新后的数据同步到Redis里面。 因为这里是基于最终一致性来实现的,如果业务场景不能接受数据的短期不一致性,那就不能...