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

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

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

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

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

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

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

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

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

参考(摘抄的文字版权属于原作者):

https://www.jianshu.com/p/fbe6a7928229
https://blog.csdn.net/chang384915878/article/details/86756463
https://www.codingbrick.com/archives/542.html

posted @ 2022-03-29 11:09  编码专家  阅读(383)  评论(0编辑  收藏  举报