🔥 前情提要
你造吗?最近三年Redis在面试中的出现率暴涨300%!笔者上周面了5家大厂,4家都问到了Redis持久化原理(瑟瑟发抖.jpg)。今天咱们就手撕Redis高频面试题,让你在30分钟内掌握核心知识点,面试官听完直呼内行!
一、青铜必考题(别再说不知道了!)
1. Redis为什么这么快?
- 内存操作(废话!但必须说)
- 单线程避免上下文切换(注意:6.0之后有多线程IO了!)
- 高效数据结构(比如跳表查询O(logN))
- I/O多路复用(epoll模型yyds)
2. String类型的底层实现?
不是简单的C字符串!而是SDS(Simple Dynamic String)结构:
struct sdshdr {
int len; // 已用长度
int free; // 剩余空间
char buf[]; // 实际存储
};
这种设计让字符串操作时间复杂度降到O(1),还能避免缓冲区溢出(划重点!)
二、白银进阶题(80%的人栽在这里)
3. 缓存穿透 vs 缓存击穿 vs 缓存雪崩
(敲黑板!这三个必须分清!)
穿透 | 击穿 | 雪崩 | |
---|---|---|---|
触发条件 | 查不存在的数据 | 热点key过期 | 大量key同时失效 |
解决方案 | 布隆过滤器+空值缓存 | 互斥锁重建缓存 | 随机过期时间 |
4. Redis事务的ACID特性
- 原子性:单条命令原子,事务整体不保证(没有回滚!!)
- 一致性:基本保证
- 隔离性:单线程执行天然隔离
- 持久性:取决于持久化配置
三、王者挑战题(吊打面试官就靠这些)
5. 主从复制原理(史诗级连环问)
- 从节点发送SYNC命令
- 主节点执行BGSAVE生成RDB
- 传输RDB文件期间的新命令存入缓冲区
- 从节点加载RDB后,执行缓冲区命令
- 后续通过命令传播保持同步
6. Redis6多线程原理
注意!不是执行命令多线程!而是:
- IO线程组处理网络请求(默认4个)
- 命令执行还是单线程(所以线程安全)
- 通过IO多线程提升网络吞吐量(实测QPS提升2倍+)
四、实战送命题(HR最爱问场景题)
7. 设计微博热搜榜
要求:实时更新,每10分钟刷新榜单
方案:
- 使用ZSET存储关键词(score=热度值)
- 每小时一个Hash记录详细数据(防数据丢失)
- Lua脚本保证原子操作:
local key = KEYS[1]
local member = ARGV[1]
local increment = ARGV[2]
redis.call('ZINCRBY', key, increment, member)
-- 同时更新当前时段的Hash
local current_hour = os.date("%Y%m%d%H")
redis.call('HINCRBY', 'hotwords:'..current_hour, member, increment)
8. 大Key问题排查
遇到内存暴涨别慌!三步走:
- redis-cli --bigkeys 快速扫描
- memory usage key 精确查看内存
- 使用SCAN命令分片处理(千万别用KEYS!)
五、死亡陷阱题(这些坑你踩过吗?)
9. SET和HSET有什么区别?
致命错误回答:“都是存键值对”
正解:
- SET是String类型操作(整个key对应一个value)
- HSET是Hash类型操作(field-value对)
10. AOF重写期间服务器挂了怎么办?
(送命题!90%的人答错)
正确姿势:
- 使用AOF重写缓冲区保证数据不丢失
- 重启后会重新执行旧的AOF文件+新的增量命令
🚀 终极加餐
2025年最新趋势预测:
- Redis Stack崛起(整合搜索、时序等模块)
- 向量数据库功能爆发式增长
- 持久化方案趋向RDB+AOF混合模式
- 内存淘汰策略更智能(LFU算法优化)
总结
记住这个万能公式:底层原理 + 实战场景 + 解决方案 = Offer到手!最后送大家一句话:Redis不是银弹,但不懂Redis绝对是硬伤!只要掌握本文这些知识点,下次面试官问你Redis时,记得把椅子往前挪——该轮到你掌控局面了!