新闻详情

新闻详情

首页 / 资讯中心 / 详情

Java面试中Redis缓存一致性怎么答?

发布时间:2026/10/1 10:31:47来源:尧图网络
Java面试中Redis缓存一致性怎么答?
面试官问缓存一致性不是想听你背“先删缓存再更新数据库”或者“先更新数据库再删缓存”这两句话。他想知道的是你知不知道这两种顺序在并发场景下分别会出什么问题以及你实际项目里怎么选、怎么兜底。先更新数据库再删除缓存——这是最常用的方案Cache Aside Pattern读的时候先读缓存没有就读数据库然后回写缓存写的时候先更新数据库再删除缓存。为什么是删除而不是更新因为更新缓存可能写入一个过期的值。比如两个并发写请求A先更新数据库为1B后更新数据库为2但B先删缓存A后删缓存缓存里最终是空下次读会从数据库加载2没问题。但如果A更新缓存为1B更新缓存为2顺序一乱缓存里可能留下1数据库是2数据就不一致了。删除缓存相当于让缓存失效下次读自然从数据库加载最新值。这个方案简单大多数场景够用。但它不是没有漏洞。并发读写的经典漏洞先更新DB再删缓存也会不一致假设线程A读数据缓存刚好失效A去查数据库拿到旧值10。此时线程B写数据更新数据库为20然后删除缓存。A拿着旧值10回来把10写进缓存。结果缓存里是10数据库里是20不一致了。这个场景发生概率不高因为读操作通常比写操作快且要求A在查数据库和写缓存之间B完成了更新和删除。但概率低不代表不会发生。解决办法是延迟双删更新数据库后删一次缓存隔几百毫秒再删一次。第二次删除是为了把并发读可能回写的旧值清掉。延迟时间怎么定一般设成读业务耗时加几百毫秒比如500ms到1秒。但延迟双删会阻塞写请求影响吞吐。更可靠的方案订阅binlog异步删除用Canal监听MySQL的binlog数据库一有变更就发消息去删Redis缓存。这样业务代码不用管缓存删除数据库和缓存彻底解耦。缺点是架构复杂了多了一个Canal中间件还要处理消息丢失和重复消费。但它是最终一致性的经典落地方式很多大厂在用。强一致性能不能做到很难。Redis和MySQL是两个系统没有分布式事务强一致性代价极高。除非用分布式锁把读写串行化但性能直接崩掉。所以面试时要说清楚缓存一致性追求的是最终一致性不是强一致性。业务能容忍短暂不一致比如几秒内看到的还是旧数据那上述方案都够用。如果业务要求强一致比如支付金额那就不该用缓存直接读数据库。面试怎么答才出彩先讲Cache Aside Pattern说明为什么删缓存而不是更新缓存。然后主动抛出并发漏洞展示你知道先更新DB再删缓存也有问题。接着给延迟双删说清楚它的原理和代价。最后提binlog订阅表示你了解更可靠的异步方案。如果能补一句“具体选哪个看业务容忍度强一致场景不用缓存”面试官会觉得你不仅懂技术还懂取舍。别忘了兜底过期时间和版本号无论用哪种方案缓存都要设过期时间。这是最后一道防线万一删缓存失败过期后也能自动纠正。还可以在缓存value里塞版本号或时间戳读的时候比对数据库版本不一致就强制刷新。这些细节说出来比背八股文有说服力。缓存一致性没有银弹只有权衡。面试官想听的不是标准答案是你思考的过程知道问题在哪知道方案代价知道业务边界。答到这一层这道题就稳了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

位置指纹定位算法详解:从RSSI原理到多源融合实践 2026/10/1 11:08:10

位置指纹定位算法详解:从RSSI原理到多源融合实践

你有没有遇到过这种情况:在商场地下停车场绕了三圈找不到车,导航地图上那个代表你的蓝点却还在马路上乱飘;或者走进一家大型医院,明明指示牌写着“检验科往右”,你走了五分钟还是没找到。室外有GPS、北斗,定…

阅读更多 →
WPF+MVVM下ModbusRTU高可靠通讯链路设计 2026/10/1 11:08:10

WPF+MVVM下ModbusRTU高可靠通讯链路设计

1. 这不是又一个“ModbusRTU封装”,而是上位机通讯链路的底层缝合术我第一次在产线调试时,用自己写的ModbusRTU类库读取PLC寄存器,连续三天没找出为什么每小时必丢一帧——不是超时,不是校验错,也不是串口缓冲区溢出。…

阅读更多 →
Vue cron表达式组件选型:通用编辑器与Element Plus自组合 2026/10/1 11:08:09

Vue cron表达式组件选型:通用编辑器与Element Plus自组合

前几天帮一个做数据采集平台的朋友改需求,后台要给每个采集任务配一个执行周期,产品经理的原话是“要能让不懂技术的运营自己点着选,别让他们手写 cron 表达式”。当时我第一反应就是找一个现成的 vue cron 表达式组件嵌进去,结果…

阅读更多 →
实时流处理生产实践:Flume、Kafka、Flink与Structured Streaming全链路解析 2026/10/1 11:08:09

实时流处理生产实践:Flume、Kafka、Flink与Structured Streaming全链路解析

做实时数据平台这行,最怕的不是业务方追问延迟几秒,而是自己心里没数。市面上聊大数据实时流处理的PPT一抓一大把,可真正落到生产环境,绕来绕去就那么几个核心组件必须打交道:Flume负责把数据搬进门,Kafka在…

阅读更多 →
混沌Kolmogorov熵计算详解:G-P算法、MATLAB实现与参数避坑指南 2026/10/1 11:08:03

混沌Kolmogorov熵计算详解:G-P算法、MATLAB实现与参数避坑指南

简介:混沌Kolmogorov熵(K熵)是刻画混沌系统不确定性的重要指标,在非线性动力学、时间序列预测等领域应用广泛。这份MATLAB程序包正是为计算该参数而编写,适合从事混沌时间序列分析的研究人员使用。程序在前人基础上重新…

阅读更多 →
uni-app安卓原生插件开发全攻略:从环境搭建到真机调试 2026/10/1 11:08:03

uni-app安卓原生插件开发全攻略:从环境搭建到真机调试

1. 为什么要写安卓原生插件:先搞懂你的真实需求做 uni-app 开发的同学,大概率都遇到过这么几个场景:项目跑得好好的,突然有个功能只能用原生代码实现,比如读取设备唯一标识、对接某个只有安卓版 SDK 的硬件、调用系统级…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉