Redis 经典面试真题答题模板清单
                           
天天向上
发布: 2025-04-20 20:20:35

原创
474 人浏览过

下面列出的这些问题是高频 Redis 面试真题,涵盖了性能机制、实战应用、设计原理等多个维度,并且每个问题都配有标准答法 + 项目场景 + 加分点,你可以灵活运用于面试答题,也可以用于备考复习。


1. Redis 是线程安全的吗?

标准回答:
是的,Redis 是线程安全的。它采用单线程模型来处理客户端请求,保证每次只有一个命令在执行,从而避免并发竞争问题。

原理:

  • Redis 使用 epoll + 单线程处理请求;
  • 不需要加锁,执行快,避免线程切换开销;
  • 对于网络 IO 和事件监听,Redis 6 后引入了多线程 IO 模型,但核心命令仍由单线程执行。

加分点:

在项目中,Redis 的单线程反而提升了并发下的稳定性,我们通过监控慢查询命令避免阻塞整个线程。


2. 为什么 Redis 不直接使用多线程?

标准回答:
Redis 最初设计时就是为了做到极致的性能、简洁和可控。使用单线程可以避免加锁、线程切换等系统开销,同时由于 Redis 操作大多是内存级别的,单线程就能达到百万级 QPS。

补充(Redis 6+):

Redis 从 6.0 开始支持了网络 IO 的多线程处理(如读写、解析),但核心命令执行仍是单线程,这种折中方案兼顾了并发与安全性。


3. Redis 如何实现分布式锁?有什么坑?

答题模板:

SET key value NX EX 10
  • 使用 SET NX EX 命令原子性地获取锁;
  • 释放锁使用 Lua 脚本,防止误删别人锁;
  • 业务执行完立即释放,避免死锁;
  • 防止锁续期失败可用 RedLock 方案。

项目中踩过的坑:

  • 锁过期时间太短导致业务未完成锁被自动释放;
  • 忘记校验 value,误删其他线程的锁;
  • 主从同步延迟,锁“假释放”问题(RedLock 针对这个)

4. Redis 支持事务吗?有什么机制?

标准回答:

是的,Redis 支持事务,使用命令:MULTI → 命令列表 → EXEC

机制特点:

  • 事务是命令的批量执行,不是关系型数据库的 ACID;
  • 不支持回滚机制,执行失败不会自动回滚;
  • 支持 WATCH 监听乐观锁机制;

项目使用场景举例:

多步更新缓存时,我们会用 WATCH 保证 key 不被其他线程并发修改,配合事务执行更新操作。


5. Redis 的淘汰策略有哪些?

主要策略:

策略描述
noeviction达到 maxmemory 后拒绝写入
allkeys-lru所有 key 按访问时间淘汰最近最少使用
volatile-lru只淘汰设置了 TTL 的 key
allkeys-random所有 key 中随机淘汰
volatile-ttlTTL 最小的先淘汰

项目中应用:

我们使用 allkeys-lru 来淘汰热点缓存数据,同时用 Prometheus + 告警阈值监控命中率。


6. Redis 使用过哪些高级数据结构?

项目答法(举例):

数据结构场景
Bitmap用户签到记录(按位表示每天签到)
HyperLogLog精确度不高但节省内存的 UV 去重
ZSet实现排行榜、任务调度
GEO附近商户、LBS 定位功能
Stream异步消息流,替代 List 的简易消息队列

7. 为什么要使用布隆过滤器?用在什么场景?

标准回答:
布隆过滤器是一种空间效率非常高的数据结构,用于判断一个元素是否可能存在于集合中,可能存在 / 一定不存在

使用原因:

  • 高效节省内存;
  • 减少请求穿透到数据库或缓存;

使用场景举例:

我们在内容服务中,用布隆过滤器拦截非法文章 ID 的请求,防止穿透访问数据库。


8. 使用 Redis 遇到过什么问题?怎么解决的?

答题建议:一问一答 + 问题解决 + 改进措施

遇到的问题解决方式改进
热 key 高频更新导致 CPU 飙高设置互斥锁 + 异步刷新机制增加过期随机 TTL、缓存预热
缓存穿透大量请求打穿布隆过滤器 / 缓存空对象统一封装缓存访问层
Redis 重启丢数据使用 AOF everysec 模式搭配持久化 RDB+备份

9. Redis 如何实现延迟任务队列?

方式 1:使用 ZSet + 时间戳排序

ZADD delay_queue timestamp task_id
ZRANGEBYSCORE delay_queue 0 now
  • ZSet 中的 score 为任务触发时间;
  • 后台定时线程轮询取出到期任务执行;
  • 执行后从 ZSet 删除;

方式 2:Redis Stream(更现代)

  • 使用 XADD 添加任务,带时间标签;
  • 使用消费者组监听;
  • 保证消息顺序、消费状态跟踪;

项目实践:

我们在订单系统中,使用 Redis 延迟队列控制 30 分钟未支付订单超时关闭。


✨ Bonus:答题技巧小贴士

技巧说明
强调“结合项目经验”面试官更喜欢真实业务场景的运用
回答后主动“补充一点”增强主动性和专业度
遇到不懂的题目,坦诚 + 思考方向比胡说八道更加分
发表回复 0

Your email address will not be published. Required fields are marked *