📚 目录
- Redis为什么快?单线程的真相
- 五大数据结构的隐藏考点
- 缓存穿透/雪崩/击穿三大陷阱(必考!)
- 持久化机制:RDB vs AOF终极对决
- 分布式锁的七种死法
- 高频附加题:缓存一致性方案
🔥 Redis为什么快?单线程的真相
你以为Redis快只是因为单线程?(错!)老司机告诉你四大核心要素:
- 内存操作:直接操作内存,比磁盘IO快100倍不止!
- IO多路复用:单线程也能处理十万级连接(epoll机制立功了)
- 数据结构优化:比如ziplist压缩列表节省内存
- 避免上下文切换:单线程不用考虑锁问题(但CPU可能成瓶颈)
举个栗子🌰:当处理10W QPS时,单线程模型就像高速公路的ETC通道,所有车辆(请求)有序快速通过,反而比多车道(多线程)减少拥堵!
🧩 五大数据结构的隐藏考点
面试官最爱挖坑题:“说说Redis的数据类型”——这时候只答5种基本类型就凉了!
必杀技回答模板:
“Redis支持String、List、Hash、Set、ZSet五种基本类型,但实际还有更底层的编码方式。比如Hash类型在元素少时使用ziplist压缩存储,元素多时自动转为hashtable,这种设计在内存效率和性能之间取得了平衡。”
加分项:说出Streams(5.0+)、GEO(地理位置)、HyperLogLog(基数统计)等扩展类型,立马让面试官眼前一亮!
💣 缓存三大陷阱破解指南
1. 缓存穿透(查不到)
症状:疯狂查询不存在的数据,把DB打垮
解药:
- 布隆过滤器拦截非法key
- 缓存空值但设置短过期时间
2. 缓存雪崩(集体失效)
症状:大量缓存同时过期,DB压力暴增
解药:
- 随机过期时间(比如基础300s + 随机60s)
- 永不过期+后台更新策略
3. 缓存击穿(热点key失效)
症状:某个明星Key突然失效,导致瞬间大量请求到DB
解药:
- 互斥锁更新(Redis的setnx命令)
- 永不过期+逻辑过期时间
💾 持久化机制深度对比
| RDB快照 | AOF日志 | |
|---|---|---|
| 原理 | 定时内存快照 | 记录所有写操作命令 |
| 优点 | 恢复速度快,文件体积小 | 数据更安全,丢失少 |
| 缺点 | 可能丢失最后一次快照后的数据 | 文件体积大,恢复速度慢 |
| 配置建议 | save 900 1 | appendfsync everysec |
| 适用场景 | 允许分钟级数据丢失 | 需要更高数据安全性 |
个人建议:生产环境通常两者都开启!RDB做冷备,AOF保证数据安全。但要注意AOF重写时的内存暴涨问题(遇到过OOM的举个手🙋♂️)
🔐 分布式锁的七种死法
用Redis实现分布式锁?Too young!这些坑踩过吗:
- 死锁:忘记释放锁 → 加过期时间
- 误删锁:A的锁被B删了 → value存唯一标识
- 续期问题:业务没执行完锁过期 → 看门狗机制
- 主从切换:主节点锁没同步到从节点 → Redlock算法
- 网络延迟:锁已过期但客户端还在操作 → 不要用于长时间任务
- 时钟漂移:多机器时间不一致 → 使用NTP同步
- 锁重入:同一线程多次获取锁 → 使用ThreadLocal记录
代码彩蛋:推荐使用Redisson客户端,已经封装好这些复杂逻辑!
🎯 高频附加题:缓存一致性方案
当面试官抛出灵魂拷问:“如何保证DB和缓存的一致性?”
标准回答路线图:
- 先说明没有银弹方案(强调CAP理论)
- 根据业务场景选择策略:
- 强一致性:使用分布式锁(性能差)
- 最终一致性(推荐):
- 先更新DB再删缓存(延迟双删)
- 监听binlog通过canal同步
- 容错措施:缓存设置过期时间兜底
禁忌:绝对不要说先删缓存再更新DB!(并发达咩❌)
✨ 终极面试技巧
当遇到不会的问题时,试试这个话术:“这个问题我之前主要聚焦在实践层面,理论层面可能需要再确认下。我的理解是…(说相关知识点)”,既展现了诚实,又体现了知识迁移能力!
最后提醒:Redis不是银弹!在以下场景要慎重:
- 数据量超过内存容量
- 需要复杂事务支持
- 对数据持久化要求极高
记得根据实际业务需求选型,别为了用Redis而用Redis哦~(别问我怎么知道的,都是泪😂)
&spm=1001.2101.3001.5002&articleId=147404603&d=1&t=3&u=a40064ac19e14166b393b4831e8b9dd2)
1266

被折叠的 条评论
为什么被折叠?



