如何保证缓存和数据库的一致性呢?

读取
读的时候,先读缓存,若缓存没有,再读数据库,从中取出数据更新缓存。

更新
写的时候,要考虑两个问题。
首先,缓存是更新还是删除?
因为更新可能把不常访问的数据放在缓存,导致缓存污染,所以选择删除。
其次,是先删除缓存,还是先更新数据库?

因为先删除缓存,后更新数据库,对于不一致的解决方法是,延时双删。
即更新完数据库后,等待一段时间再次删除缓存,但这个时间很难评估。
所以选择先更新数据库,后删除缓存。并且,通过重试机制来保证删除缓存成功,避免不一致。
重试机制
重试的方式有两种,
一种是,把重试请求写到消息队列中,然后由专门的消费者来重试。但引入消息队会增加维护成本。

另一种是,订阅 binlog。
当有数据变化时,MySQL 就会产生 binlog。
我们可以订阅它,拿到具体操作的数据,去删除缓存。


强一致性是保证不了的,只能尽可能的保证。
浙公网安备 33010602011771号