Redis(高阶篇)03章——缓存双写一致性之更新策略探讨
- 手机
- 2025-09-02 20:42:02

一、反馈回来的面试题 一图你只要用缓存,就可能会涉及到redis缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性的问题双写一致性,你先动缓存redis还是数据库mysql哪一个?why?延时删除你做过吗?会有哪些问题?有这么一种情况,微服务查询redis无 MySQL有,为保证数据双写一致性回写redis你需要注意什么?双检加锁策略你了解过吗?如何尽量避免缓存击穿?redis和MySQL双写100%会出纰漏,做不到强一致性,你如何保证最终一致性? 二、缓存双写一致性,谈谈你的理解 (1)如果redis中有数据
需要和数据库中的值相同
(2)如果redis中无数据数据库中的值要是最新值,且准备回写redis
(3)缓存按照操作来分,细分两种 2.3.1只读缓存 2.3.2读写缓存 (1)同步直写策略 写数据库之后也同步写redis缓存,缓存和数据库中的数据一致;对于读写缓存来说,要想保证缓存和数据库中的数据一致,就要采用同步直写策略 (2)异步缓写策略 正常业务中,MySQL数据变了,但是可以在业务上容许出现一定时间后才作用于redis,比如仓库、物流系统异常情况出现了, 不得不将失败的动作重新修补,有可能需要借助kafka或者RabbitMQ等消息中间件,实现重试重写 (4)一图代码你如何写 2.4.1问题? 2.4.2采用双检加锁策略 什么是双检加锁策略?代码: 2.4.3Code 三、数据库和缓存一致性的几种更新策略 (1)目的:总之,我们要达到最终一致性 (2)可以停机的情况 挂牌报错,凌晨升级,温馨提示,服务降级单线程,这样重量级的数据操作最好不要多线程 (3)我们讨论四种更新策略 3.3.1先更新数据库再更新缓存 异常问题1:异常问题2: 3.3.2先更新缓存再更新数据库 不太推荐:业务上一般把MySQL作为底单数据库 ,保证最后解释异常问题2: 3.3.3先删除缓存,再更新数据库 (1)异常问题 分析步骤1,先删除缓存,再更新数据库分析步骤2,先删除缓存,再更新数据库分析步骤3,先删除缓存,再更新数据库上面3步骤串讲梳理 (2)解决方案 采用延时双删策略:双删方案面试题: 这个删除该休眠多久呢?这种同步淘汰策略,吞吐量降低怎么办?后续看门狗WatchDog源码分析延时双删导致吞吐量降低的原因: 3.3.4先更新数据库再删除缓存 (1)异常问题 (2)业务指导思想 微软云:Cache-Aside pattern - Azure Architecture Center | Microsoft Learn我们后面的阿里巴巴canal也是类似的思想:订阅binlog程序在MySQL中有现成的中间件叫canal,可以完成订阅binlog日志的功能 (3)解决方案 (4)类似经典的分布式事务问题,只有一个权威答案 流量充值,先下发短信实际充值可能滞后5分钟,可以接受电商发货,短信下发但是物流明天见 (4)小总结 3.4.1如何选择方案,利弊如何? 3.4.2一图总结Redis(高阶篇)03章——缓存双写一致性之更新策略探讨由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Redis(高阶篇)03章——缓存双写一致性之更新策略探讨”