这里整理 Redis 高频面试10题 ,每题分核心答案(背诵版)+ 精简口述版,覆盖原理、使用、踩坑、集群,适配Java后端/中间件面试,直接背诵即可。
Redis 高频面试 10 题(附标准答案)
1. Redis 为什么是单线程还能这么快?
标准答案
- 核心命令处理为单线程模型,避免多线程竞争、上下文切换开销;
- 基于内存操作,内存读写速度远高于磁盘;
- 采用 IO 多路复用(epoll),单线程高效监听多个网络连接;
- 数据结构设计高效,底层编码做了大量优化。
精简口述
Redis 命令执行单线程,无线程竞争;纯内存操作 + IO多路复用,兼顾并发与性能。
2. Redis 持久化有哪几种方式?区别&选型?
标准答案
两种持久化:RDB 、AOF
- RDB:全量快照,定时把内存数据写入磁盘二进制文件。优点:文件小、恢复快;缺点:可能丢失最后一次快照后的数据。
- AOF:追加写日志,记录每一条写命令。优点:数据丢失极少;缺点:文件体积大、恢复慢。
选型
- 纯缓存、允许少量丢数据:只用 RDB
- 数据零容忍丢失:开启 AOF
- 生产主流:RDB + AOF 混合开启
精简口述
RDB是全量快照,恢复快、可能丢数据;AOF记录操作日志,数据更安全。生产一般两者同时开启。
3. 缓存穿透、缓存击穿、缓存雪崩,分别是什么?怎么解决?
(1)缓存穿透
现象 :查询不存在的数据 ,请求直接打到数据库。
解决:布隆过滤器、空值缓存、接口层校验。
(2)缓存击穿
现象 :热点Key过期瞬间 ,大量并发请求直击数据库。
解决:互斥分布式锁、热点Key永不过期、逻辑过期。
(3)缓存雪崩
现象 :大量Key同时过期 / Redis集群宕机,流量全压数据库。
解决:过期时间加随机值、Redis高可用(哨兵/集群)、服务熔断降级、限流。
精简口述
穿透查不存在数据,用布隆过滤器/空缓存;击穿是热点Key过期,加锁或永不过期;雪崩是批量过期/服务宕机,打散过期时间+高可用+熔断限流。
4. 讲一下 Redis 分布式锁实现、注意点、缺陷
标准答案
- 实现:使用
SET key 唯一值 NX PX 过期时间原子命令加锁; - 释放锁:Lua脚本原子判断持有者+删除,防止误删;
- 注意点:必须设过期时间防死锁,必须存唯一标识防误删;
- 缺陷:业务超时导致锁失效、主从同步延迟引发锁丢失;
- 优化:锁续命(看门狗)、主从问题使用 Redlock 红锁。
精简口述
通过SET NX PX加锁,Lua脚本释锁;要防死锁、防误删。存在锁超时、主从丢锁问题,可用看门狗续期、Redlock优化。
5. Redis 五种数据结构及底层实现
标准答案
- String :底层
SDS(简单动态字符串),二进制安全; - List :低版本 ziplist+linkedlist,新版
quicklist; - Hash :数据量小时
ziplist,量大转hashtable; - Set:整数集合 intset / 哈希表 hashtable;
- ZSet :数据量小时 ziplist,量大转
skiplist(跳表)+ 哈希表。
精简口述
String基于SDS;List用quicklist;Hash/Set根据数据量切换压缩列表与哈希表;ZSet底层是跳表。
6. Redis 过期键删除策略?
标准答案
三种策略配合使用:
- 惰性删除:访问Key时才判断是否过期,过期则删除(节约CPU,浪费内存);
- 定期删除:每隔一段时间,随机抽查部分过期Key并删除(折中方案);
- 无主动全量遍历删除(会阻塞主线程)。
精简口述
采用惰性删除+定期删除结合,不会全量扫描,避免阻塞服务。
7. Redis 内存淘汰策略有哪些?
标准答案
内存满时触发,共8种,分三类:
- volatile-xxx :只淘汰设置了过期时间 的Key;
- volatile-lru、volatile-lfu、volatile-random、volatile-ttl
- allkeys-xxx :淘汰所有Key ;
- allkeys-lru、allkeys-lfu、allkeys-random
- noeviction(默认):不淘汰,直接报错拒绝写入。
常用 :allkeys-lru(优先淘汰最少访问)、allkeys-lfu(优先淘汰最少使用频次)。
精简口述
分过期键淘汰、全键淘汰、不淘汰三类;生产常用 LRU/LFU 策略。
8. Redis 主从复制原理?主从同步流程
标准答案
- 全量同步 :从节点首次连接主节点,主执行
bgsave生成RDB,传输给从节点,同时缓存期间写命令,RDB加载完毕后补发缓存命令; - 增量同步 :后续基于复制偏移量+复制积压缓冲区,同步增量命令;
- 新版支持部分重同步,避免网络短暂断开后全量重同步。
精简口述
首次全量RDB同步,后续增量同步;依靠偏移量和积压缓冲区,支持部分重同步。
9. Redis 哨兵(Sentinel)作用与工作原理
标准答案
哨兵基于主从架构,实现三大核心能力:
- 监控:持续监测主、从节点状态;
- 消息通知:节点异常时告警;
- 自动故障转移:主节点宕机,哨兵集群投票选出新主,修改其他从节点指向,客户端自动感知切换。
精简口述
哨兵监控节点、异常告警,主节点宕机后自动选新主、完成故障转移,实现高可用。
10. Redis Cluster 集群模式原理(槽位、分片、哈希)
标准答案
- 采用多主多从架构,无中心节点;
- 把整个数据集划分为 16384 个哈希槽,每个主节点负责一部分槽位;
- 计算规则:
CRC16(key) % 16384定位槽位,找到对应节点; - 支持槽位迁移、节点扩容缩容,主节点宕机则从节点自动上位。
精简口述
集群共16384个哈希槽,通过CRC16算法分片存储;多主多从,支持扩容、自动故障转移,实现分布式横向扩展。
补充:快速复盘(整体串讲)
Redis 基于内存+单线程+IO多路复用保证高性能;
靠 RDB/AOF 持久化保证数据落地;
针对缓存三大问题有成熟解决方案;
分布式锁依赖原子命令+Lua实现,缺陷用Redlock弥补;
部署演进:单机 → 主从 → 哨兵(高可用)→ Cluster集群(分片扩容)。