🔥 Redis面试10题速通(2026 Java实习版)

基于真实面经提炼 | 3分钟背一道 | 面试官最常问的都在这里

📦 更多免费工具:

📝 简历生成器 ☕ 面试题库 📚 更多文章

1. Redis为什么这么快?

💡 面试标准答案:
① 纯内存操作,数据存在RAM里,读写速度纳米秒级
② 单线程模型,避免多线程上下文切换和锁竞争(Redis 6.0后I/O多线程但命令执行仍单线程)
③ IO多路复用(epoll),一个线程处理多个客户端连接
④ 高效的数据结构,每种数据类型都做了底层优化(如ziplist→listpack)

2. 缓存穿透是什么?怎么解决?

💡 面试标准答案:
穿透:查询一个根本不存在的数据,缓存和数据库都没有,导致每次请求都打到数据库。
解决方案:
布隆过滤器:将所有可能存在的key哈希到一个bitmap中,查询时先判断key是否存在
缓存空值:即使查不到也缓存一个null,设置短过期时间(30秒)

3. 缓存击穿和缓存雪崩有什么区别?

💡 面试标准答案:
击穿:单一热点key过期瞬间,大量请求打到数据库 → 互斥锁/逻辑过期/热点数据永不过期
雪崩:大量key同时过期或Redis宕机 → TTL加随机值/多级缓存/限流降级
一句话区分:击穿是一把刀捅一个洞,雪崩是整面墙塌了

4. Redis分布式锁怎么实现?

💡 面试标准答案:
核心命令SET lock_key value NX EX 30
NX=key不存在才设置(互斥),EX=设置过期时间(防死锁)

关键细节
① value用UUID,释放锁时校验——防止A释放了B的锁
② 释放锁用Lua脚本保证原子性:if redis.get(lock)==uuid then redis.del(lock)
Redisson的Watchdog:业务没执行完自动续期,完美解决锁过期问题
// Redisson一行搞定
RLock lock = redisson.getLock("order:" + orderId);
lock.lock(30, TimeUnit.SECONDS);  // Watchdog自动续期

5. Redis持久化RDB和AOF怎么选?

💡 面试标准答案:
RDB:定时全量快照。性能高但可能丢数据
AOF:记录每次写命令。数据安全但文件大恢复慢
最佳实践混合持久化(Redis 4.0+),RDB全量+AOF增量

6. Redis主从复制和哨兵模式?

💡 面试标准答案:
主从:读写分离,主写从读,不能自动故障切换
哨兵:监控主节点+自动选举新主+通知客户端 → 高可用
集群:数据分片(16384槽),每对主从独立,解决单机容量瓶颈

7. 缓存淘汰策略有哪些?

💡 面试标准答案:
volatile-lru:从设置了过期时间的key中淘汰最近最少使用的
allkeys-lru:从所有key中淘汰最近最少使用的
volatile-lfu:淘汰使用频率最低的
volatile-ttl:淘汰快过期的
生产环境一般用allkeys-lru

8. Redis中的BigKey和HotKey?

💡 面试标准答案:
BigKey:单个key的value过大(string>10KB或集合元素>1万),会导致网络阻塞、慢查询
→ 拆分(hash分桶)、异步删除(UNLINK代替DEL)
HotKey:单个key的QPS过高导致单节点压力
→ 本地缓存(Caffeine)+ 读写分离 + key散列

9. Redis事务和MySQL事务有什么不同?

💡 面试标准答案:
Redis事务不保证原子性——某条命令失败不影响其他命令执行(不回滚)
MySQL事务保证ACID,失败回滚
Redis用Lua脚本实现原子性——比事务更可靠

10. 你在项目里怎么用Redis的?

💡 面试标准答案(结合秒杀项目):
秒杀系统三处用到Redis:
库存扣减:Lua脚本原子操作,保证不超卖
分布式锁:Redisson防止用户重复下单
令牌桶限流:控制秒杀接口QPS,保护下游
RAG系统用到Redis:
缓存AI回答结果,命中率40%+,响应时间从2秒降到200ms