面试连环炮系列(二十七):如何保证缓存与数据库的数据一致性

1. 如何保证缓存与数据库的数据一致性?

要保持数据强一致性,只能将读请求和写请求串行化,在同一个内存队列里执行。但是串行化会导致系统的吞吐量大幅度降低,多用几倍的机器去支撑线上的请求。

2. 如果只要数据最终一致性,该怎么做呢?

  • 缓存设置过期时间。
  • 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。
  • 更新数据的时候,先更新数据库,然后再删除缓存。

3. 为什么是删除缓存,而不是更新缓存?

  • 删除比更新更快捷。比如有些缓存值是由多个数据计算出来的,如果计算比较耗时,在高并发下,更新缓存的方式增加了读缓存不一致的概率。
  • 有些缓存是冷数据,删除缓存等于是将更新缓存延迟到了读请求的时刻。

4. 如果删除缓存失败了,怎么解决?

  • 将删除缓存的操作交给消息队列,删除了失败重试,但是这样对业务代码侵入比较强。
  • 采用阿里的Canal,它可以订阅数据库的binlog,获得数据进行删除缓存操作。

Original: https://www.cnblogs.com/xiaoyangjia/p/16067956.html
Author: 编码砖家
Title: 面试连环炮系列(二十七):如何保证缓存与数据库的数据一致性

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578121/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球