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

读取

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

更新

写的时候,要考虑两个问题。

首先,缓存是更新还是删除?

因为更新可能把不常访问的数据放在缓存,导致缓存污染,所以选择删除。

其次,是先删除缓存,还是先更新数据库?

因为先删除缓存,后更新数据库,对于不一致的解决方法是,延时双删。

即更新完数据库后,等待一段时间再次删除缓存,但这个时间很难评估。

所以选择先更新数据库,后删除缓存。并且,通过重试机制来保证删除缓存成功,避免不一致。

重试机制

重试的方式有两种,

一种是,把重试请求写到消息队列中,然后由专门的消费者来重试。但引入消息队会增加维护成本。

另一种是,订阅 binlog。

当有数据变化时,MySQL 就会产生 binlog。

我们可以订阅它,拿到具体操作的数据,去删除缓存。

参考:
缓存和数据库一致性问题,看这篇就够了
25 | 缓存异常(上):如何解决缓存和数据库的数据不一致问题?

posted @ 2021-12-09 19:50  ayuecoding  阅读(24)  评论(0)    收藏  举报