当前位置: 首页 > news >正文

《Java面试85题图解版(二)》进阶深化下篇:Redis缓存

📘 《Java面试85题图解版(二)》进阶深化下篇:Redis缓存

阅读提示:这是“图解+比喻+一句话总结”面试题库第二篇的进阶深化下篇,专注于Redis缓存共8道高频面试题。每道题仍然是四层结构——结构图 → 场景比喻 → 关键对比表 → 一句话总结


五、Redis 缓存(第61-68题)

📌 第61题:Redis 为什么这么快

一图看清

纯内存操作 → 读写微秒级 单线程命令处理 → 无锁竞争和上下文切换 I/O多路复用(epoll) → 一个线程监听大量连接 高效数据结构 → SDS字符串、压缩列表、跳跃表等专门优化 巧妙编码 → 小数据用紧凑编码(intset, ziplist)

比喻记忆高速收费员

  • 纯内存:钱箱在手边,不需要去银行金库取。
  • 单线程:一个人算账,不用交接班,没有交接差错。
  • 多路复用:十几个车道对讲机,哪个有车处理哪个,不傻等。
  • 6.0后多线程I/O:雇学徒负责收钱找零(网络读写),收费员自己还是只算账(命令执行单线程)。

💡 一句话总结Redis快 = 内存+单线程无锁+多路复用+高效结构,四大功臣。


📌 第62题:Redis 五种基本数据类型

一图看清

String → 缓存单值、计数器、分布式锁值 Hash → 存储对象属性(用户信息、购物车) List → 消息队列、最新列表(有序可重复) Set → 标签、共同好友、去重(无序唯一) ZSet → 排行榜、时间线(按分数排序,唯一)

比喻记忆超市商品管理

  • String:价格标签,一物一价,简单直接。
  • Hash:商品详情卡,一张纸记录名称、产地、重量、保质期。
  • List:收银排队,先进先出,可从头尾操作。
  • Set:抽奖箱,名字不重复,能做交集(同时参与两个活动的人)。
  • ZSet:销量排行榜,每个商品带销量分,自动按分数排名。

💡 一句话总结String单值,Hash装对象,List排队,Set去重,ZSet排榜。


📌 第63题:Redis 持久化 RDB vs AOF vs 混合

一图看清

RDB:定时全量快照,文件小恢复快,可能丢失间隔数据 AOF:每条写命令追加,数据安全但文件大恢复慢 混合持久化(4.0+):RDB全量快照 + AOF增量追加,兼顾两者

比喻记忆手机备份

  • RDB:每天凌晨3点拍一张全机快照。手机下午丢了,凌晨3点到丢前的数据全没了。
  • AOF:每做一个操作记日记。丢了照着日记重做,细到每一步,恢复慢但完整。
  • 混合:凌晨拍一张快照,凌晨后只记操作笔记。恢复时先还原快照,再补几笔——又快又全。

💡 一句话总结RDB快而不全,AOF全而不快,混合持久化鱼与熊掌兼得。


📌 第64题:Redis 过期删除 + 内存淘汰

一图看清

过期键删除策略: 惰性删除 → 访问时才检查,过期则删除 定期删除 → 每秒10次,随机抽取一批key检查 内存淘汰(达到maxmemory时触发): noeviction → 不淘汰,写入直接报错 allkeys-lru → 所有key中淘汰最近最少使用的 allkeys-lfu → 所有key中淘汰最不经常使用的 volatile-lru / volatile-lfu → 仅设过期时间的key volatile-ttl → 淘汰最快过期的

比喻记忆冰箱管理

  • 惰性删除:你饿了才看冰箱,拿鸡蛋时发现臭了,顺手扔掉。
  • 定期删除:每周末随机翻几个角落,过期就扔。
  • 内存淘汰:冰箱满了,新菜放不下。可扔最久没吃的(LRU),扔吃得次数最少的(LFU),或扔最快过期的(TTL)。

💡 一句话总结惰性+定期清过期;内存满了按策略淘汰,常用allkeys-lru。


📌 第65题:缓存穿透、击穿、雪崩

一图看清

穿透:大量请求查不存在的数据 → 缓存无 + DB也无 → DB被打爆 击穿:单个热点key过期瞬间 → 大量请求直击DB 雪崩:大量key同时过期或Redis宕机 → 缓存大面积失效 → DB瞬间承压

比喻记忆水库防洪

  • 穿透:有人故意在水坝上钻孔(请求不存在的key),水流直冲底部泥土(DB)。建“非法钻孔登记本”(布隆过滤器)拦截,或给钻孔灌水泥(缓存空值)。
  • 击穿:某个热门水闸刚好放水,洪峰直冲下游。马上上锁只让一个工人检修(互斥锁),修好再开。
  • 雪崩:多个闸门同时意外全开。闸门开启时间随机打散(过期时间加随机值),建多个水库(高可用集群)。

💡 一句话总结穿透查“无”,击穿是“一”过热,雪崩是“大”批倒——布隆+锁+过期打散。


📌 第66题:Redis 分布式锁正确姿势

一图看清

加锁:SET key value NX PX 30000(原子操作:不存在则设,带30秒超时) 解锁:Lua脚本校验value一致后才DEL(防止误删别人的锁) 常见坑及方案: 锁超时,业务没执行完 → Redisson看门狗自动续期 误删别人的锁 → 唯一标识 + 原子校验后删除 主从切换丢锁 → Redlock算法多实例加锁 不可重入 → Redisson加计数器实现可重入

比喻记忆火车站自助寄存柜

  • 加锁:扫码开柜,系统给动态码,设30分钟自动清柜。
  • 看门狗:管理员每10分钟看你还在不在,在就帮你续期。
  • 误删:你输码取行李,系统先确认码是你的。不是你的码拒绝打开(Lua校验value)。
  • 主从丢锁:Redlock要求同时在多个独立柜子加锁,过半成功才算成功。

💡 一句话总结Redis锁=原子加+唯一凭证+原子解,生产直接上Redisson别自己造轮子。


📌 第67题:Redis 哨兵 vs 集群

一图看清

哨兵Sentinel:监控+自动故障转移,全量数据在主,单主瓶颈,垂直扩展 集群Cluster:去中心化,16384哈希槽分片,水平扩展,至少3主3从

比喻记忆物业 vs 城中村

  • 哨兵:一栋楼(主),监控摄像头(哨兵)盯着。楼倒了启用备楼(从提升为主)。扩容只能加楼层(垂直扩展),总有天花板。
  • 集群:村里多栋楼,每栋管部分住户(分片)。一栋倒了住户自动分配(槽迁移)。可不断建新楼(水平扩展)。

💡 一句话总结哨兵管主从切换高可用,集群管分片扩展,大流量必须集群。


📌 第68题:Redis 6.0 多线程模型

一图看清

6.0前:单线程全包(网络读取 + 命令解析 + 命令执行 + 网络写回) 6.0后:网络读写多线程(io-threads) + 命令执行仍单线程

比喻记忆面馆经营升级

  • 6.0前:老板一人接单、煮面、端面。多灶台(多核CPU)但老板只有一双手(单线程),接单时不能煮面。
  • 6.0后:雇两个学徒接单、传菜(多线程I/O)。老板只煮面(命令执行单线程)。面还是老板的味道(原子性不变),但接单传菜快多了。

💡 一句话总结6.0只让网络读写变多线程,命令执行仍是单线程,原子性不变。


📌 下篇预告(系列最终篇)

本篇(下篇)是《Java面试85题图解版(二)》的最后一篇,我们完整覆盖了Redis从快到锁到集群的全部核心能力

至此,进阶深化篇的39道题已全部分享完毕。你已经掌握了:

  • 并发编程从锁升级到线程池的全链路
  • JVM从运行时数据区到OOM排查
  • Spring从IoC到事务失效的核心原理
  • MySQL与PostgreSQL的深层差异
  • Redis所有高频考点

这些恰好是面试官在中后段最常追问的内容——你把它们用画面和故事讲出来,面试官就知道你不是背的。

系列的最后,我们进入《Java面试85题图解版(三):高阶与系统设计篇》。17道题,覆盖CAP理论、分布式ID、秒杀系统设计、分布式事务、微服务通信、CQRS,以及Java 21虚拟线程、Sealed Class模式匹配、云原生容器化部署等大厂高频高价值题目。

👉 点击关注我,高阶与系统设计篇更新后第一时间推送!

http://www.jsqmd.com/news/794021/

相关文章:

  • 观察使用Token Plan套餐后月度AI调用成本的变化趋势
  • Java多线程:从入门到进阶
  • 构建产品级AI智能体:五层架构与审美工程实战指南
  • 鸣潮自动化终极指南:5分钟解放双手,告别重复刷图
  • [具身智能-660]:具身智能系统 三层分级架构(基于 ROS2 分布式全域组网):上位机可视化层 + 中位机 AI 决策层 + 下位机实时感知执行层三级分层架构。
  • 从绕接到焊接:硬件连接技术的演进与工程思维启示
  • ARM TPIU调试接口原理与应用实践
  • 面向对象——面向对象基础
  • Docker镜像逆向分析:dfimage工具原理、实战与CI/CD应用
  • 从美光收购尔必达看DRAM产业格局:技术、市场与整合逻辑
  • 抖音下载器终极指南:3种场景下的高效内容获取方案
  • AI智能体规则引擎:从提示词约束到运行时控制的架构实践
  • openclaw官网入口中文版_一键1分钟免费使用小龙虾AI!
  • 手把手教你学Simulink——基于Simulink的储能PCS(功率转换系统)离网V/f控制仿真示例
  • 以太网技术演进:从局域网到万物互联的生态系统
  • SDN与IoT融合:构建云边端一体的智能网络神经系统
  • 【AI大模型春招面试题31】什么是“零样本学习(Zero-Shot)”“少样本学习(Few-Shot)”?大模型实现这类能力的核心原因?
  • 芯片验证覆盖率:从度量陷阱到有效策略的实战解析
  • 别再只盯着信号强度了!深入浅出解读LoRa天线S11、驻波比与回波损耗
  • 从硬件抽象到软件接口标准化:破解芯片设计中的驱动开发困局
  • EDA平台化架构:电子系统设计的未来趋势
  • 手把手教你学Simulink——【进阶版】单相并网逆变器比例谐振(PR)控制与谐波补偿仿真示例
  • java内存模型(JMM)
  • 嵌入式开发:从汇编到C语言的高效迁移与优化
  • AI+运维提效,ssl-cert-monitoring(SSL证书监控系统)2.0修复bug及新增功能说明
  • 软件设计原则之OCP开闭原则
  • 2026廊坊硅酸铝柔性包裹,防火专业厂家这样选
  • ARM虚拟化关键寄存器HIFAR与HMAIR详解
  • 终极指南:如何用Vue-Fabric-Editor解决轻量级图片编辑需求
  • 从EE Times标题竞赛看工程师文化:技术幽默如何驱动社区活力