Redis 高频面试 10 题

这里整理 Redis 高频面试10题 ,每题分核心答案(背诵版)+ 精简口述版,覆盖原理、使用、踩坑、集群,适配Java后端/中间件面试,直接背诵即可。

Redis 高频面试 10 题(附标准答案)

1. Redis 为什么是单线程还能这么快?

标准答案

  1. 核心命令处理为单线程模型,避免多线程竞争、上下文切换开销;
  2. 基于内存操作,内存读写速度远高于磁盘;
  3. 采用 IO 多路复用(epoll),单线程高效监听多个网络连接;
  4. 数据结构设计高效,底层编码做了大量优化。

精简口述

Redis 命令执行单线程,无线程竞争;纯内存操作 + IO多路复用,兼顾并发与性能。


2. Redis 持久化有哪几种方式?区别&选型?

标准答案

两种持久化:RDBAOF

  • RDB:全量快照,定时把内存数据写入磁盘二进制文件。优点:文件小、恢复快;缺点:可能丢失最后一次快照后的数据。
  • AOF:追加写日志,记录每一条写命令。优点:数据丢失极少;缺点:文件体积大、恢复慢。

选型

  • 纯缓存、允许少量丢数据:只用 RDB
  • 数据零容忍丢失:开启 AOF
  • 生产主流:RDB + AOF 混合开启

精简口述

RDB是全量快照,恢复快、可能丢数据;AOF记录操作日志,数据更安全。生产一般两者同时开启。


3. 缓存穿透、缓存击穿、缓存雪崩,分别是什么?怎么解决?

(1)缓存穿透

现象 :查询不存在的数据 ,请求直接打到数据库。

解决:布隆过滤器、空值缓存、接口层校验。

(2)缓存击穿

现象热点Key过期瞬间 ,大量并发请求直击数据库。

解决:互斥分布式锁、热点Key永不过期、逻辑过期。

(3)缓存雪崩

现象 :大量Key同时过期 / Redis集群宕机,流量全压数据库。

解决:过期时间加随机值、Redis高可用(哨兵/集群)、服务熔断降级、限流。

精简口述

穿透查不存在数据,用布隆过滤器/空缓存;击穿是热点Key过期,加锁或永不过期;雪崩是批量过期/服务宕机,打散过期时间+高可用+熔断限流。


4. 讲一下 Redis 分布式锁实现、注意点、缺陷

标准答案

  1. 实现:使用 SET key 唯一值 NX PX 过期时间 原子命令加锁;
  2. 释放锁:Lua脚本原子判断持有者+删除,防止误删;
  3. 注意点:必须设过期时间防死锁,必须存唯一标识防误删;
  4. 缺陷:业务超时导致锁失效、主从同步延迟引发锁丢失;
  5. 优化:锁续命(看门狗)、主从问题使用 Redlock 红锁

精简口述

通过SET NX PX加锁,Lua脚本释锁;要防死锁、防误删。存在锁超时、主从丢锁问题,可用看门狗续期、Redlock优化。


5. Redis 五种数据结构及底层实现

标准答案

  1. String :底层 SDS(简单动态字符串),二进制安全;
  2. List :低版本 ziplist+linkedlist,新版 quicklist
  3. Hash :数据量小时 ziplist,量大转 hashtable
  4. Set:整数集合 intset / 哈希表 hashtable;
  5. ZSet :数据量小时 ziplist,量大转 skiplist(跳表) + 哈希表。

精简口述

String基于SDS;List用quicklist;Hash/Set根据数据量切换压缩列表与哈希表;ZSet底层是跳表。


6. Redis 过期键删除策略?

标准答案

三种策略配合使用:

  1. 惰性删除:访问Key时才判断是否过期,过期则删除(节约CPU,浪费内存);
  2. 定期删除:每隔一段时间,随机抽查部分过期Key并删除(折中方案);
  3. 无主动全量遍历删除(会阻塞主线程)。

精简口述

采用惰性删除+定期删除结合,不会全量扫描,避免阻塞服务。


7. Redis 内存淘汰策略有哪些?

标准答案

内存满时触发,共8种,分三类:

  1. volatile-xxx :只淘汰设置了过期时间 的Key;
    • volatile-lru、volatile-lfu、volatile-random、volatile-ttl
  2. allkeys-xxx :淘汰所有Key
    • allkeys-lru、allkeys-lfu、allkeys-random
  3. noeviction(默认):不淘汰,直接报错拒绝写入。

常用allkeys-lru(优先淘汰最少访问)、allkeys-lfu(优先淘汰最少使用频次)。

精简口述

分过期键淘汰、全键淘汰、不淘汰三类;生产常用 LRU/LFU 策略。


8. Redis 主从复制原理?主从同步流程

标准答案

  1. 全量同步 :从节点首次连接主节点,主执行 bgsave 生成RDB,传输给从节点,同时缓存期间写命令,RDB加载完毕后补发缓存命令;
  2. 增量同步 :后续基于复制偏移量+复制积压缓冲区,同步增量命令;
  3. 新版支持部分重同步,避免网络短暂断开后全量重同步。

精简口述

首次全量RDB同步,后续增量同步;依靠偏移量和积压缓冲区,支持部分重同步。


9. Redis 哨兵(Sentinel)作用与工作原理

标准答案

哨兵基于主从架构,实现三大核心能力:

  1. 监控:持续监测主、从节点状态;
  2. 消息通知:节点异常时告警;
  3. 自动故障转移:主节点宕机,哨兵集群投票选出新主,修改其他从节点指向,客户端自动感知切换。

精简口述

哨兵监控节点、异常告警,主节点宕机后自动选新主、完成故障转移,实现高可用。


10. Redis Cluster 集群模式原理(槽位、分片、哈希)

标准答案

  1. 采用多主多从架构,无中心节点;
  2. 把整个数据集划分为 16384 个哈希槽,每个主节点负责一部分槽位;
  3. 计算规则:CRC16(key) % 16384 定位槽位,找到对应节点;
  4. 支持槽位迁移、节点扩容缩容,主节点宕机则从节点自动上位。

精简口述

集群共16384个哈希槽,通过CRC16算法分片存储;多主多从,支持扩容、自动故障转移,实现分布式横向扩展。


补充:快速复盘(整体串讲)

Redis 基于内存+单线程+IO多路复用保证高性能;

靠 RDB/AOF 持久化保证数据落地;

针对缓存三大问题有成熟解决方案;

分布式锁依赖原子命令+Lua实现,缺陷用Redlock弥补;

部署演进:单机 → 主从 → 哨兵(高可用)→ Cluster集群(分片扩容)。

相关推荐
陈橘又青1 小时前
国产数据库工具测评:DBLens 以本地化工程能力与 AI 演进路径凸显优势
数据库
念恒123061 小时前
MySQL事务(下)---MySQL InnoDB MVCC 与 Read View:从隐藏列、Undo Log 到 RR 与 RC 的本质区别
数据库·mysql·oracle
i220818 Faiz Ul1 小时前
在线预约导游|基于SSM+vue的在线预约导游系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·在线预约导游系统
Rick19931 小时前
什么是Redis的 IO 多路复用
redis·缓存
anew___1 小时前
《数据库原理》精要解读(五)—— 数据库完整性:守护数据的真实与逻辑
数据库·oracle
Java面试题总结1 小时前
MySQL EXISTS 详解:存在性判断、NOT EXISTS 与实战示例
android·数据库·mysql
cuijiecheng20182 小时前
Little-Anti-Cheat源码分析(1)——Little-Anti-Cheat插件简介
数据库
土狗TuGou2 小时前
SQL内功笔记 · 第5篇:SQL逻辑执行顺序
数据库·笔记·后端·sql·mysql
草莓熊Lotso2 小时前
【LangChain】聊天模型实战:结构化输出完全指南(从原理到落地)
数据库·python·langchain·软件工程