当前位置:网站首页>缓存一致性,删除缓存,写入缓存,缓存击穿,缓存穿透,缓存雪崩
缓存一致性,删除缓存,写入缓存,缓存击穿,缓存穿透,缓存雪崩
2022-06-29 11:38:00 【raoxiaoya】
一、DB操作与缓存操作一致性的问题
当你既要更新数据库,又要更新缓存的时候,就涉及到一致性的问题,如何保证两者能同时成功呢?
- 通过消息队列,将对缓存的操作放到队列实现,可以确保其成功。
- 订阅 binlog 日志,需要借助 canal 工具来知道数据库做了哪些操作,然后去操作缓存。
- 通过 dtm 二阶段消息,也可以确保缓存被操作成功。
二、如何删除缓存
1、先删缓存再更新数据库
- 线程A删除缓存,还没来得及更新数据库。
- 线程B进来了,发现缓存没有,读取数据库(此时是旧值),将旧值回填缓存。
- 线程A更新了数据库。
会出现缓存中的数据是旧值。
缓解方法
- 设置简短的过期时间兜底,在这个时间内会出现不一致,缺点是数据库负载会加大。
- 延时双删,线程A删除缓存,更新数据库,sleep一会,再删一次缓存,这个睡眠时间是个问题,所以没办法根治。
- 在应用层引入类似版本的机制,对应用层有要求,通用性受限,不易复用。
2、先更新数据库再删缓存
- 线程A更新了数据库中的值,但还没来得及删除缓存中的值。
- 线程B读取到缓存,此时为旧值。
- 线程A删除缓存。
这种情况总体对业务影响较小。一般在生产环境中,也推荐大家采用该模式。
三、如何写入缓存
线程A发现缓存为空,查询数据库,准备回填缓存的时候发生了阻塞。
线程B发现缓存为空,查询数据库,此时看到的值为新值,因为其他线程修改了数据,回填缓存。
线程A苏醒过来,回填缓存,此时是旧值。
会出现缓存中的数据是旧值。
如果要想解决这种问题,那就只能在读缓存的时候加分布式锁,当然在这个过程中可以做一些优化,具体可以使用 rockscache,它的说明,具体原理图

四、缓存击穿
前面说到,我们应该先更新数据库,再删除缓存,那么对于热点数据,突然把缓存删了会导致缓存击穿,对数据库造成巨大冲击,针对这种情况,我们需要限制最终去到数据库的流量,我们可以在进程内部加锁,也就是单飞模式,这样每个进程只有一个查询数据库的操作,当然如果你的项目服务器很多,那么对数据库的查询也会很多,那么只能使用分布式锁来加以限制。
五、缓存穿透
如果请求的数据在数据库中也不存在,那么为了节省缓存空间一般是不会缓存它的,这就会导致这些请求都会一次次的被打到数据库,这就是缓存穿透。
首先,如果预防住了缓存击穿,那么在一点程度上也减轻了缓存穿透的危害,除此之外,我们还可以引入布隆过滤器将这些恶意的key存起来。
六、缓存雪崩
如果在某一个时刻,缓存大面积同时过期,那么这就是缓存雪崩,预防的方式也很简单,为不同的key设置不同的过期时间,过期时间最好带一个随机数。
边栏推荐
- Set operator of gbase8s database in combined query
- 力扣每日一题-第31天-1779.找到最近的有相同x或y坐标的点
- Engineering practice behind dall-e 2: ensure that the output of the model complies with the content policy
- Jerry's configuration of TWS cross pairing [chapter]
- GBase8s数据库INTO table 子句
- GBase8s数据库select有ORDER BY 子句4
- Jerry's about TWS channel configuration [chapter]
- 速看|期待已久的2022年广州助理检测工程师真题解析终于出炉
- 面试突击61:说一下MySQL事务隔离级别?
- 参加2022年杭州站Cocos Star Meetings
猜你喜欢

对p值的理解

ERP编制物料清单 华夏

AUTOCAD——文字显示方式、CAD怎么直接打开天正图纸

亲测!Centos7部署PHP + Swoole

When you are young, you should be awake to fight, and when you are young, you should have the courage to try

What are outer chain and inner chain?

【LeetCode】14、最长公共前缀

每周推荐短视频:爱因斯坦是怎样思考问题的?

Pro test! Centos7 deploy PHP + spool

高校如何基于云原生构建面向未来的智慧校园?全栈云原生架构VS传统IT架构
随机推荐
【JUC系列】同步工具类之ThreadLocal
一种可解释的几何深度学习模型,用于基于结构的蛋白质结合位点预测
正大期货留4数据整合
Is it safe for Orient Fortune Securities to open an account? Handling of securities account opening
联想领像 lenovoimage 部分打印机 驱动 PPD 文件
ERP编制物料清单 基础
Titanium dynamic technology: our Zadig landing Road
力扣每日一题-第31天-1779.找到最近的有相同x或y坐标的点
ERP preparation of bill of materials Huaxia
Unified exception reporting practice based on bytecode
MATLAB Gui 实现点击按钮,打开文件对话框,导入图片功能
参加2022年杭州站Cocos Star Meetings
GBase8s数据库对 STANDARD 或 RAW 结果表排序
面试突击61:说一下MySQL事务隔离级别?
Is it safe for Hengtai securities to open an account? Ranking of securities
Take another picture of cloud redis' improvement path
GBase8s数据库INTO STANDARD 和 INTO RAW 子句
Zhengda futures liu4 data integration
当技术人成长为 CEO,应该修改哪些“Bug”?
正大期货主账户留4行情软件用的什么?