
文章图片

文章图片

文章图片

文章图片
很多小伙伴在面试的时候 , 应该都遇到过类似的问题 , 如何确保缓存和数据库的一致性?
如果你对这个问题有过研究 , 应该可以发现这个问题其实很好回答 , 如果第一次听到或者第一次遇到这个问题 , 估计会有点懵 , 今天我们来聊聊这个话题 。
1. 问题分析首先我们来看看为什么会有这个问题!
我们在日常开发中 , 为了提高数据响应速度 , 可能会将一些热点数据保存在缓存中 , 这样就不用每次都去数据库中查询了 , 可以有效提高服务端的响应速度 , 那么目前我们最常使用的缓存就是 Redis 了 。
用 Redis 做缓存 , 并不是一说缓存就是 Redis , 还是要结合业务的具体情况 , 我们可以根据不同业务对数据要求的实时性不同 , 将数据分为三级 , 以电商项目为例:
- 第 1 级:订单数据和支付流水数据:这两块数据对实时性和精确性要求很高 , 所以一般是不需要添加缓存的 , 直接操作数据库即可 。
- 第 2 级:用户相关数据:这些数据和用户相关 , 具有读多写少的特征 , 所以我们使用 redis 进行缓存 。
- 第 3 级:支付配置信息:这些数据和用户无关 , 具有数据量小 , 频繁读 , 几乎不修改的特征 , 所以我们使用本地内存进行缓存 。
然而 , 当数据存入缓存之后 , 如果需要更新的话 , 往往会来带另外的问题:
- 当有数据需要更新的时候 , 先更新缓存还是先更新数据库?如何确保更新缓存和更新数据库这两个操作的原子性?
- 更新缓存的时候该怎么更新?修改还是删除?
- 先更新缓存 , 再更新数据库 。
- 先更新数据库 , 再更新缓存 。
- 先淘汰缓存 , 再更新数据库 。
- 先更新数据库 , 再淘汰缓存 。
在回答这个问题之前 , 我们不妨先来看看三个经典的缓存模式:
- Cache-Aside
- Read-Through/Write through
- Write Behind
Cache-Aside 又分为读缓存和写缓存两种情况 , 我们分别来看 。
2.1 读缓存先来看一张流程图:
它的流程是这样:
- 读取数据 。
- 创投圈|抖音小店无货源适合新手小白么?如何精细化运营?新手小白看来
- 松下|淘宝店铺信誉分等级如何提升?
- PHP|如何降低用户关注的非必要页面的权重传递?
- 量子纠缠存在于任何维度空间?人类如何逃出三维空间变成“神”?
- 显卡|如何组装旗舰游戏电脑?这里有你想要的答案
- 火星和地球交换位置会如何?火星会出现生命吗?答案没你想得简单
- 快手视频|视频号和抖音快手的差异化在哪里呢?你应该如何选择适合你的平台
- AirPods|如何进行微信活动运营才有效?
- 酷睿处理器|AMD Zen4如何接招?13代酷睿Z790主板偷跑:DDR4内存还在
- 蓝牙AOA定位那点事系列085:如何应对第一次合作软件开发合作伙伴的问题和需求
