[问答]Redis高频面试20问:从基础到分布式

阿里云推广

Q1: Redis为什么这么快?

A: Redis的高性能来自四个核心设计:

设计特点 说明 效果
纯内存操作 所有数据存储在内存中 读写速度是磁盘的10-100倍
单线程模型 避免了多线程的上下文切换和锁竞争 无锁编程,简单高效
IO多路复用 基于epoll的事件驱动模型 单线程可处理数万并发连接
高效数据结构 SDS、跳表、压缩列表等 专为性能优化的数据结构

Q2: Redis持久化方式有哪些?如何选择?

A: Redis提供三种持久化方案:

方式 原理 优点 缺点 适用场景
RDB 定时快照 文件紧凑、恢复快、适合备份 可能丢失数据(最后一次快照后) 对数据完整性要求不高
AOF 记录写命令 数据安全、最多丢1秒 文件大、恢复慢 对数据完整性要求高
混合 RDB+AOF 兼顾两者优点 配置稍复杂 生产环境推荐

Q3: 缓存雪崩、穿透、击穿如何解决?

A: 这是缓存架构的三大经典问题:

1. 缓存雪崩 – 大量缓存同时过期

现象: 某一时刻大量缓存key同时过期,请求直接打到数据库,导致数据库压力剧增。

解决方案:

  • 过期时间加随机值,避免同时过期
  • 热点数据设置永不过期,后台异步更新
  • 多级缓存架构,本地缓存+分布式缓存

2. 缓存穿透 – 查询不存在的数据

现象: 查询一个数据库中不存在的数据(如id=-1),每次都要查数据库。

解决方案:

  • 布隆过滤器:快速判断数据是否存在
  • 空值缓存:将不存在的结果也缓存(短时间)
  • 参数校验:拦截非法请求

3. 缓存击穿 – 热点key过期

现象: 某个热点key过期瞬间,大量请求同时打到数据库。

解决方案:

  • 互斥锁:只允许一个线程回源
  • 逻辑过期:不设置TTL,通过逻辑时间判断是否过期
  • 热点key预加载:提前异步刷新

Q4: 如何实现分布式锁?

A: Redis分布式锁的核心是SET key value NX EX原子命令。

分布式锁要求

要求 说明 Redis实现
互斥性 同一时刻只有一个客户端能持有锁 SET NX(不存在才设置)
防死锁 客户端崩溃后锁能自动释放 EX设置过期时间
可重入 同一客户端可多次获取锁 记录客户端标识和重入次数
安全性 只能释放自己持有的锁 释放时验证value

Q5: Redis集群方案有哪些?

方案 架构 优点 缺点
主从复制 一主多从 读写分离、数据备份 手动故障转移
哨兵模式 主从+哨兵监控 自动故障转移 只有一个主节点写
Cluster模式 多主多从,数据分片 水平扩展、高可用 架构复杂、客户端需支持

Redis面试的核心是理解其单线程模型、持久化机制、高可用架构以及缓存相关的经典问题。

发表评论