但是,其带来的问题是,数据不是强一致性的,而且可能会丢失(我们知道Unix/linux非正常关机会导致数据丢失,类似这种情况) 。
另外,Write Back实现逻辑比较复杂,因为他需要track有哪些数据是被更新了的,需要刷到持久层上 。操作系统的write back会在仅当这个cache需要失效的时候,才会被真正持久起来,比如,内存不够了 , 或是进程退出了等情况,这又叫lazy write 。
四、总结对于这个老生常谈的问题,分析起来其实并不简单 。
额外分享几点自己心得给你:
1、性能和一致性不能同时满足,为了性能考虑,通常会采用「最终一致性」的方案;
2、掌握缓存和数据库一致性问题,核心问题有 3 点:缓存利用率、并发、缓存 + 数据库一起成功问题;
3、失败场景下要保证一致性,常见手段就是「重试」,同步重试会影响吞吐量,所以通常会采用异步重试的方案;
4、订阅变更日志的思想,本质是把权威数据源(例如 MySQL)当做 leader 副本,让其它异质系统(例如 redis / Elasticsearch)成为它的 follower 副本,通过同步变更日志的方式,保证 leader 和 follower 之间保持一致 。
面讲到的几种缓存更新的设计方式,都是前人总结出来的经验,这些方式或多或少都有一些弊端 , 并不完美,实际上也很难有完美的设计 。大家在做系统设计的时候 , 也不要去追求完美,要有一些取舍,找到一种最适合自己业务场景的方式就行 。
【让数据库和缓存数据保持一致的三种策略】

文章插图
图片
推荐阅读
- 贾玲再次登上热搜,引发大规模讨论,让大波浪和晚礼服成为话题。
- 狗狗肠炎和细小的区别,狗狗患细小和肠胃炎的分别是什么
- 41岁Rain东京塔被偶遇,又高又壮又拉风,和金泰熙结婚7年仍恩爱
- 如何在MySQL中实现数据的版本管理和回滚操作?
- Linux中磁盘和文件系统工作原理解析
- 小姐姐做长款美甲后便换了一种敲键盘方式的动图!我让你得瑟了吗
- 如何分辨复阳和甲流病毒 如何分辨复阳和甲流
- 和平精英团队竞技怎么设置枪方案
- 王思聪穿3万外套搂美女逛街,女方和前任是闺蜜,现任发文显伤感
- 残幅和全幅的区别,残幅18焦段相当于全幅多少
