文章图片
文章图片
文章图片
文章图片
很多小伙伴在面试的时候 , 应该都遇到过类似的问题 , 如何确保缓存和数据库的一致性?
如果你对这个问题有过研究 , 应该可以发现这个问题其实很好回答 , 如果第一次听到或者第一次遇到这个问题 , 估计会有点懵 , 今天我们来聊聊这个话题 。
1. 问题分析首先我们来看看为什么会有这个问题!
我们在日常开发中 , 为了提高数据响应速度 , 可能会将一些热点数据保存在缓存中 , 这样就不用每次都去数据库中查询了 , 可以有效提高服务端的响应速度 , 那么目前我们最常使用的缓存就是 Redis 了 。
用 Redis 做缓存 , 并不是一说缓存就是 Redis , 还是要结合业务的具体情况 , 我们可以根据不同业务对数据要求的实时性不同 , 将数据分为三级 , 以电商项目为例:
- 第 1 级:订单数据和支付流水数据:这两块数据对实时性和精确性要求很高 , 所以一般是不需要添加缓存的 , 直接操作数据库即可 。
- 第 2 级:用户相关数据:这些数据和用户相关 , 具有读多写少的特征 , 所以我们使用 redis 进行缓存 。
- 第 3 级:支付配置信息:这些数据和用户无关 , 具有数据量小 , 频繁读 , 几乎不修改的特征 , 所以我们使用本地内存进行缓存 。
然而 , 当数据存入缓存之后 , 如果需要更新的话 , 往往会来带另外的问题:
- 当有数据需要更新的时候 , 先更新缓存还是先更新数据库?如何确保更新缓存和更新数据库这两个操作的原子性?
- 更新缓存的时候该怎么更新?修改还是删除?
- 先更新缓存 , 再更新数据库 。
- 先更新数据库 , 再更新缓存 。
- 先淘汰缓存 , 再更新数据库 。
- 先更新数据库 , 再淘汰缓存 。
在回答这个问题之前 , 我们不妨先来看看三个经典的缓存模式:
- Cache-Aside
- Read-Through/Write through
- Write Behind
Cache-Aside 又分为读缓存和写缓存两种情况 , 我们分别来看 。
2.1 读缓存先来看一张流程图:
它的流程是这样:
- 读取数据 。
- 互联网家装|骑手、用户、商家的「不可能三角」,美团如何平衡?
- OPPO Find X5 Pro夜景表现如何?自研芯片真有疗效?
- 3D打印|做自媒体如何找到自己的定位?调研先行
- 老板娘|电商三巨头业绩出炉,拼多多净利润77亿,阿里1432亿,京东如何
- 裁员|后疫情时代,企业如何做好数字化转型布局线上流量
- 华为手机|外媒是如何报道国产华为手机的?
- 网易云音乐|“后跨界时代”,空天企业如何与大厂共处? | 深度
- OLED|全球首款120Hz OLED笔记本实际体验如何?看看知乎大V给出的参考
- 石墨烯|315信息安全实验室、个人信息保护大势来袭,品牌如何精准营销?
- 自媒体|自媒体剪辑真的能挣钱吗?该如何做好自媒体呢?