Redis高频面试题(含答案)
当然可以,Redis 是面试中非常常见的高频考点,尤其在后台开发、分布式系统、缓存设计等方向,面试官常常通过 Redis 来考察你的高并发处理能力、系统设计能力和对缓存一致性理解。
以下是一些典型 Redis 的面试场景题目类型和你可以如何回答的思路:
✅ 一、基础使用类问题
1. Redis 是什么?为什么要用它?
Redis 是一个开源的基于内存的高性能键值对数据库,支持多种数据结构(String、List、Set、Hash、ZSet 等),常用于缓存、排行榜、消息队列等场景。
优点:
- 内存存储,访问速度快(纳秒级)
- 支持丰富的数据结构
- 支持持久化(RDB/AOF)
- 支持发布订阅、分布式锁等功能
2. Redis 有哪些数据类型?分别适合什么场景?
数据类型 | 说明 | 场景 |
---|---|---|
String | 最基本的数据类型 | 缓存对象、计数器 |
List | 有序链表 | 消息队列、时间线 |
Set | 无序不重复集合 | 标签、好友推荐、抽奖系统 |
Hash | 键值对集合 | 存储对象(如用户信息) |
ZSet | 有序集合(分数排序) | 排行榜、延迟队列 |
✅ 二、缓存类问题
3. Redis 缓存雪崩、穿透、击穿的区别?怎么解决?
问题 | 原因 | 解决方案 |
---|---|---|
缓存穿透 | 查询一个数据库和缓存都没有的数据 | 布隆过滤器、缓存空值 |
缓存击穿 | 热点数据过期瞬间大量请求打到数据库 | 设置互斥锁、永不过期+异步刷新 |
缓存雪崩 | 大量缓存同时过期 | 设置不同过期时间、加锁限流、预热机制 |
4. 缓存与数据库如何保持一致性?
常用方案:
- 延迟双删策略:
- 先删缓存
- 更新数据库
- 睡几毫秒,再删一次缓存(防止并发读取旧数据)
- Binlog + 消息队列同步(复杂业务):监听数据库更新事件,同步刷新缓存
- 强一致性要求较低时: 允许缓存短暂脏读(最终一致性)
✅ 三、并发控制与分布式锁
5. Redis 如何实现分布式锁?
- 使用
SET key value NX PX 3000
实现互斥锁 - 解锁时需确保是“自己加的锁”才能释放(防止误删)
- 如果是分布式集群,推荐使用 Redlock 算法(多个 Redis 实例加锁成功才算真正加锁)
✅ 四、性能与持久化相关
6. Redis 是单线程的吗?为什么性能还这么高?
- 是单线程的(主要指命令执行是单线程)
- 性能高的原因:
- 基于内存操作
- 使用非阻塞 I/O,多路复用(epoll)
- 数据结构简单(O(1) 操作为主)
7. Redis 的持久化机制有哪些?区别?
- RDB(快照): 周期性保存内存数据,适合全量备份,恢复快
- AOF(Append Only File): 每次写操作都记录日志,数据更安全,但恢复较慢
- 混合模式(默认): Redis 7+ 支持 RDB + AOF 混合持久化,兼顾恢复速度和数据安全
✅ 五、其他高频问题
8. Redis 集群怎么实现?如何扩容?
- 使用 Redis Cluster 实现分布式部署
- 数据按槽位(slot)分配,共 16384 个槽位,节点间分配槽位
- 扩容方式:添加节点,重新分配槽位即可
9. 如何实现排行榜功能?
用 ZSet
类型,设置分数作为排名值,如:
ZADD ranking 100 user1
ZADD ranking 200 user2
ZREVRANGE ranking 0 9 WITHSCORES
10. Redis 如何防止内存爆炸?淘汰策略有哪些?
- 设置
maxmemory
限制最大内存 - Redis 提供多种淘汰策略(通过
maxmemory-policy
配置):- noeviction:不淘汰,内存不足时报错
- allkeys-lru:淘汰最久未使用 key
- volatile-lru:仅淘汰设置了过期时间的 key 中最久未使用的
- 还有 LFU、TTL、随机策略等
✅ 额外加分:项目中 Redis 的实际使用经验
你可以补充你项目中的 Redis 使用场景,比如:
- 热门接口数据缓存(商品详情、用户信息)
- 秒杀系统库存处理
- 基于布隆过滤器防止缓存穿透
- Redis + Redisson 实现分布式锁控制并发
- 使用 Lua 脚本实现原子操作
- 利用 Stream 做异步消息队列处理
如果你告诉我你平时项目中 Redis 主要用在哪些模块,我也可以帮你量身定制一段“项目场景 + Redis 技术点”的面试回答,贴合你实际经历更有说服力!要不要我帮你加一下?