news 2026/5/11 6:03:32

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《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模式匹配、云原生容器化部署等大厂高频高价值题目。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 6:02:31

产业公地与紧密设计链:制造业创新效率与供应链韧性的核心

1. 从“离岸”到“归岸”:一场迟来的产业觉醒几年前,当哈佛商学院的加里皮萨诺教授在一次播客访谈中,用“产业公地”这个概念把我从昏昏欲睡中惊醒时,整个美国工业界的主流思潮还在“离岸外包”的狂欢中加速。成本、成本、还是成本…

作者头像 李华
网站建设 2026/5/11 5:59:31

实验室显卡与本机远程连接复盘:直连SSH到ZeroTier

适用场景:Windows 实验室训练机、内网环境、个人主机稳定远程 SSH 接入这次要连接的是一台实验室 Windows 训练机,,配置为双RTX 5090。机器本身已经开启了 OpenSSH Server,最初我们希望直接通过实验室内网地址连接:10.…

作者头像 李华
网站建设 2026/5/11 5:58:33

52. 人工智能实战:Embedding 模型升级怎么不翻车?从前期召回波动到双索引、离线评测与灰度切换

人工智能实战:Embedding 模型升级怎么不翻车?从前期召回波动到双索引、离线评测与灰度切换 一、问题场景:换了更强的 Embedding,RAG 反而答得更差 RAG 系统上线后,团队经常会想升级 Embedding 模型。 理由很充分: 1. 新模型维度更高 2. 多语言能力更好 3. 排行榜效果更…

作者头像 李华
网站建设 2026/5/11 5:55:37

构建产品级AI智能体:五层架构与审美工程实战指南

1. 项目概述:从“人设模板”到“产品级Agent工厂”的跃迁如果你最近也在研究如何让AI Agent(智能体)变得更聪明、更可靠,而不是一个只会说漂亮话的“实习生”,那你可能和我一样,已经厌倦了那些满天飞的“人…

作者头像 李华
网站建设 2026/5/11 5:55:36

Docker镜像逆向分析:dfimage工具原理、实战与CI/CD应用

1. 项目概述:从镜像反推Dockerfile的实用工具在容器化开发和运维的日常工作中,我们经常会遇到一个经典场景:拿到一个现成的Docker镜像,却找不到它的构建蓝图——Dockerfile。这可能是接手一个遗留项目,或是分析一个第三…

作者头像 李华
网站建设 2026/5/11 5:47:25

软件设计原则之OCP开闭原则

(OCP) 开闭原则 Open Closed Principle核心原则对扩展开放,对修改关闭。场景描述还是拿 UserInfo 进行举例。在开发过程中我们需要对我们使用的对象进行多步的组合操作,比如这里要打印账户和密码信息。常规的方式就是在外部直接进行调用,或者…

作者头像 李华