什么是数据库一致性问题
就是数据库之间数据不一致
为什么会出现数据库一致性问题
我们在做业务时,如果每次都去MySQL存取数据,效率比较低,我们会引入缓存机制,把数据存入Redis,每次去Redis读,去MySQL写数据
由于在MySQL写数据,Redis也需要更新,又由于Redis每个键都有过期时间,所以当过期时,MySQL和Redis会存在数据不一致的情况
如何解决
1. 先更新缓存,后更新数据库
2. 先更新数据库,后更新缓存
存在两个问题
1. 第一步成功、第二步失败
2. 并发顺序问题
更优化的做法
延时双删
延时双删针对第一种解决方法,在更新数据库完成后sleep一会再次更新缓存
消息队列
针对第二种解决方案,先更新数据库,成功后往消息队列发消息,消费到消息后再删除缓存,借助消息队列的重试机制来实现,达到最终一致性的效果
订阅binlog日志,再操作日志
Binlog是MySQL数据库中的一种日志文件,记录了所有的数据库更改操作,包括插入、更新和删除等操作。通过监听binlog文件,可以获取到数据库的变更操作,并将这些操作同步到其他节点或系统中,从而保证数据的一致性。