常见的 Redis 面试题(高频整理)

1. 引言

Redis 作为面试中高频出现的中间件,几乎每个后端岗位的面试都会涉及。本文整理了最常见的 Redis 面试题,从基础概念到高可用架构,再到性能优化与实战场景,帮助你系统性地准备面试。

2. Redis 基础概念

2.1 什么是 Redis?

Redis(Remote Dictionary Server)是一个基于内存的高性能键值存储系统,支持多种数据结构,常被用作缓存、消息队列、分布式锁等场景。

2.2 Redis 和 Memcached 有什么区别?

  • 数据类型:Redis 支持 String、Hash、List、Set、ZSet 等多种结构;Memcached 仅支持简单的 Key-Value。
  • 持久化:Redis 支持 RDB 和 AOF 两种持久化方式;Memcached 不支持持久化。
  • 高可用:Redis 支持主从复制、哨兵、集群;Memcached 不支持。
  • 性能:两者都很快,但 Redis 功能更丰富。

2.3 Redis 为什么快?

  • 纯内存操作,避免磁盘 I/O。
  • 单线程模型,避免上下文切换和锁竞争。
  • 高效的数据结构设计。
  • I/O 多路复用机制(epoll)。

3. Redis 数据类型

3.1 Redis 支持哪些数据类型?

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • ZSet(有序集合)
  • Bitmap(位图)
  • HyperLogLog(基数统计)
  • GEO(地理位置)
  • Stream(流)

3.2 各数据类型的使用场景?

  • String:缓存、计数器、分布式锁。
  • Hash:存储对象信息,如用户信息。
  • List:消息队列、最新列表。
  • Set:去重、共同好友、抽奖。
  • ZSet:排行榜、延时队列。

4. Redis 持久化

4.1 Redis 持久化方式有哪些?

  • RDB(快照):定时将内存数据生成快照写入磁盘。
  • AOF(追加文件):将每次写命令追加到日志文件。

4.2 RDB 和 AOF 如何选择?

  • RDB 恢复速度快,但可能丢失最后一次快照之后的数据。
  • AOF 数据更安全,但文件体积大、恢复速度慢。
  • 生产环境常两者结合使用。

4.3 AOF 重写是什么?

AOF 文件过大时,Redis 会通过重写机制生成最小化的命令集,压缩文件体积。

5. Redis 缓存问题

5.1 什么是缓存穿透?

查询一个不存在的数据,缓存和数据库都没有,导致请求直接打到数据库。

解决方案:

  • 缓存空值。
  • 布隆过滤器拦截。

5.2 什么是缓存击穿?

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

解决方案:

  • 互斥锁。
  • 热点数据永不过期。
  • 逻辑过期。

5.3 什么是缓存雪崩?

大量 key 在同一时间过期,导致数据库压力骤增。

解决方案:

  • 过期时间加随机值。
  • 多级缓存。
  • 限流降级。

5.4 如何保证缓存与数据库的一致性?

  • 先更新数据库,再删除缓存。
  • 延迟双删。
  • 使用消息队列异步同步。

6. Redis 高可用

6.1 Redis 主从复制原理是什么?

主节点负责写,从节点负责读,通过 RDB 快照和命令传播实现数据同步。

6.2 什么是 Redis 哨兵(Sentinel)?

哨兵用于监控主从节点状态,在主节点故障时自动进行故障转移,选举新的主节点。

6.3 Redis Cluster 集群是如何工作的?

Redis Cluster 通过分片(Slot)将数据分布到多个节点,每个节点负责一部分哈希槽,支持水平扩展和高可用。

7. Redis 分布式锁

7.1 如何用 Redis 实现分布式锁?

使用 SET key value NX EX seconds 命令,保证原子性。

bash 复制代码
SET lock_key unique_value NX EX 30

7.2 分布式锁的常见问题?

  • 锁过期:业务未执行完锁已过期,可用 Redisson 看门狗自动续期。
  • 误删锁:删除前校验 value 是否为当前线程持有。
  • 主从切换:锁丢失问题,可用 RedLock 方案。

8. Redis 性能与优化

8.1 Redis 内存淘汰策略有哪些?

  • noeviction:不淘汰,直接报错。
  • allkeys-lru:从所有 key 中淘汰最久未使用的。
  • volatile-lru:从设置了过期时间的 key 中淘汰最久未使用的。
  • allkeys-random:随机淘汰。
  • volatile-ttl:淘汰剩余存活时间最短的 key。

8.2 什么是 Big Key?如何解决?

Big Key 指单个 key 的 value 过大,会导致阻塞、网络拥塞等问题。

解决方案:

  • 拆分大 key。
  • 使用 Hash 分片存储。
  • 惰性删除(unlink)。

8.3 什么是热 Key?如何解决?

热 Key 指被高频访问的 key,可能导致单节点压力过大。

解决方案:

  • 本地缓存。
  • 读写分离。
  • 将热 key 分散到多个节点。

9. Redis 实战场景

9.1 Redis 实现排行榜

使用 ZSet,按分数排序:

bash 复制代码
ZADD leaderboard 100 "user1"
ZADD leaderboard 90 "user2"
ZREVRANGE leaderboard 0 9 WITHSCORES

9.2 Redis 实现消息队列

使用 List 的 LPUSH 和 BRPOP 实现简单的消息队列,或使用 Stream 实现更可靠的消息队列。

9.3 Redis 实现限流

使用 INCR + EXPIRE 实现固定窗口限流,或使用 Lua 脚本实现滑动窗口限流。

10. 总结

Redis 面试题覆盖范围广,从基础数据类型到高可用架构、缓存问题、分布式锁、性能优化等都需要掌握。建议结合实战项目深入理解每个知识点,面试时能结合实际场景作答会更出彩。

相关推荐
派小心.2 小时前
网站统计采样数据的误差核对
大数据·服务器·前端·数据库·人工智能·小程序·数据分析
龙腾AI白云2 小时前
数字孪生、具身智能、世界模型三者交叉
数据库·人工智能·机器学习·flask·pygame
小猿姐2 小时前
KubeBlocks Enterprise v2.3 发布!
redis·kubernetes·aiops
SelectDB技术团队3 小时前
Apache Doris 基于 Lance 的向量检索深度解析
数据库·数据仓库·数据分析·湖仓一体·apache doris·lakehouse·多模湖仓
这个DBA有点耶3 小时前
从INDEX到JOIN_ORDER:MySQL 8.0 Hint语法体系与五类实战场景
数据库·mysql·架构
数字新视界3 小时前
机房动环监控助力智能管理
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
梅菲塔亚3 小时前
博客_Redis入门到实战
数据库·redis·缓存
abcyuu3 小时前
用友 U8 Cloud 生产制造模块深度解析:从 BOM 建立到成本核算的技术实现
前端·数据库·制造
夜雪一千3 小时前
MySQL 的ID用什么数据类型更好?主键ID选型实战
数据库·mysql