本文整理了一套 Redis 最新高质量面试题,涵盖基础原理、核心数据结构、持久化机制、缓存策略、分布式特性、高可用部署以及性能优化等多个维度,适用于中高级开发者面试准备、系统学习和面试官出题参考。
一、基础原理篇
1. Redis 是单线程的吗?为什么还这么快?
解析:
Redis 主线程确实是单线程(使用 epoll 实现 IO 多路复用),但其性能高的原因包括:
- 所有数据结构操作都在内存中完成,速度快。
- 基于事件驱动机制(非阻塞 IO)。
- 单线程避免了线程切换开销和加锁问题。
- 使用高效的数据结构和命令操作(O(1) 或 O(logN))。
2. Redis 支持哪些基本数据结构?
解析:
数据结构 | 描述 | 常用场景 |
---|---|---|
String | 字符串,最大 512MB | 缓存对象、计数器、Token |
List | 双向链表 | 消息队列、任务队列 |
Hash | 键值对集合 | 用户信息缓存 |
Set | 无序集合 | 标签、唯一值统计 |
ZSet | 有序集合(带分数) | 排行榜、延时队列 |
Bitmap | 位图结构 | 活跃用户统计 |
HyperLogLog | 基数统计 | UV 去重统计 |
Stream | 日志流 | 消息队列(Kafka 替代) |
二、持久化与数据安全
3. Redis 的 RDB 和 AOF 有什么区别?可以同时开启吗?
解析:
维度 | RDB | AOF |
---|---|---|
触发机制 | 定时快照 | 每次写操作 |
性能 | 更高 | 较低(频繁写磁盘) |
恢复速度 | 快 | 慢(逐条重放) |
数据完整性 | 有丢失风险 | 更可靠 |
可以同时开启,推荐方式是:
- 同时启用 RDB 和 AOF;
- AOF 配置为
appendfsync everysec
; - Redis 5.0 起支持混合持久化(RDB + AOF 统一文件)。
三、缓存机制与淘汰策略
4. Redis 的缓存淘汰策略有哪些?默认是哪种?
解析:
可选策略(通过 maxmemory-policy
配置):
noeviction
(默认):内存满时直接报错allkeys-lru
:最近最少使用优先淘汰volatile-lru
:设置过期时间的键中使用 LRU 淘汰allkeys-random
/volatile-random
:随机淘汰volatile-ttl
:优先淘汰即将过期的键
四、分布式特性与集群部署
5. Redis 集群如何实现数据分片?槽(slot)是什么?
解析:
Redis Cluster 使用哈希槽机制进行分片,总共 16384 个 slot。
- 每个 key 的 CRC16 值 mod 16384 确定其槽号。
- 槽由各节点分配,每个节点管理若干槽。
6. Redis Cluster 有哪些一致性和可用性限制?
解析:
- 不支持多 key 跨 slot 的事务(支持使用 hash tag 绕过)。
- 写操作至少需要大多数主节点存活。
- 每个主节点建议配一个从节点做 failover。
- 异步复制可能导致数据丢失(CAP 中偏向 AP)。
五、高可用与哨兵模式
7. Redis Sentinel 的原理和作用?
解析:
Sentinel(哨兵)用于 Redis 的高可用:
- 监控主从节点状态;
- 自动故障转移;
- 通知客户端主节点地址变更;
- 提供故障报警。
Sentinel 本身也是一个 Redis 进程,可以部署多个实例做分布式监控。
六、性能优化与最佳实践
8. 如何避免 Redis 缓存穿透、缓存击穿和缓存雪崩?
解析:
- 缓存穿透:查询不存在的数据,建议加布隆过滤器/空对象缓存。
- 缓存击穿:热点数据过期瞬间大量请求打到数据库,可加锁/预热/永不过期。
- 缓存雪崩:大面积 key 同时过期,加随机过期时间/限流熔断降级。
9. 如何使用 Redis 实现分布式锁?需要注意哪些问题?
解析:
实现方式:
SET lock_key value NX EX 10
注意点:
- 必须设置过期时间(防死锁)
- value 唯一(保证释放是自己加的锁)
- 释放锁用 Lua 脚本原子操作:
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
推荐方案:使用 Redisson / SET NX EX + Lua。
七、热门实战问题
10. 项目中 Redis 如何做热点缓存预热与更新策略?
解析:
- 启动后批量加载热点数据(预热)
- 对热门 key 使用异步更新 + 双写机制
- TTL + 延迟双删确保强一致
- 定期刷新过期缓存 + 后台自动更新机制
结语
Redis 是现代系统中不可或缺的核心组件,无论作为缓存、队列、分布式协调中间件,还是作为数据库,面试中对 Redis 的考察已经从 API 操作提升到系统设计层次。
建议大家在准备过程中,多动手实践,结合项目经验,熟悉其运行机制和性能优化策略。
如果你觉得本文有帮助,欢迎点赞、收藏、转发!你的一键三连,是我持续更新的最大动力 💪
👉 更多高质量面试题专栏:《Java 分布式高频面试题大全》《JVM 深度剖析与实战调优》
如果你需要我帮你发布到 CSDN 或想将其结构调整成你个人风格的专栏文章,也可以告诉我,我可以为你定制封面图、目录样式、文章分节格式等。是否继续?