数据库主从,为什么会不一致?
先回顾下,无缓存时,数据库主从不一致问题。
如上图,发生的场景是,写后立刻读:
(1)主库一个写请求(主从没同步完成);
(2)从库接着一个读请求,读到了旧数据;
(3)最后,主从同步完成;
导致的结果是:主动同步完成之前,会读取到旧数据。
可以看到,主从不一致的影响时间很短,在主从同步完成后,就会读到新数据。
如上图所述,在并发读写导致缓存中读入了脏数据之后:
(6)主从同步;
(7)通过工具订阅从库的binlog,这里能够最准确的知道,从库数据同步完成的时间;
画外音:本图画的订阅工具是DTS,可以是cannal,也可以自己订阅和分析binlog。
(8)从库执行完写操作,向缓存再次发起删除,淘汰这段时间内可能写入缓存的旧数据;
如此这般,至少能够保证,引入缓存之后,主从不一致,不会比没有引入缓存更坏。