三.如何解决数据不一致
基本上使用Cache-Aside Pattern模式可以解决大部分场景,但是我们其实还可以优化,达到弱一致性,以及最终一致性的效果
延时双删策略
删除缓存重试机制
读取binlog...异步删除缓存
延迟双删策略,先删除缓存,再更新数据库,然后等待1秒,再次删除缓存,这个等待时间要根据业务处理时间适当调整,这样就是为了读请求带来的脏数据,可以再第二次删除掉,清除脏数据
删除缓存重试机制...,不管是使用双删策略,还是Cache-Aside Pattern模式,如果第二步删除失败,都可能带来数据不一致问题,
因此我们就可以在删除的时候重复删除,当我们删除失败的时候,我们可以把删除的key放入到消息队列中...,然后消费消息队列的key,直到删除操作成功,
取binlog异步删除缓存,使用消息队列虽然可以,但是他会浸入我们的业务逻辑,因此我们可以采用binlog日志进行解耦重复删除,如下图
我们可以使用某种机制采集数据库的...binlog异步删除
如果是一主多从,采集所有的从库,可以收到一条消息,删除一次,也可以收到最后一台机器的binlog,再进行删除