Redis 面试题 15 道

笔记/Java/面试专栏/Redis 面试题 15 道

整理自 Redis 面试题 15 道,已精简冗余表述。详细原理见 Redis 基础

相关学习笔记#

专题笔记
Redis 基础Redis 基础
MySQL 基础MySQL 基础

目录#


基础与使用#

1. Redis 是什么#

基于内存的 NoSQL KV 数据库;单线程处理命令(高版本 IO 可多线程),高并发读写;key 为字节数组。Java 常用 Jedis / Lettuce 访问。value 支持 String、List、Set、ZSet、Hash。→ Redis 基础

2. Redis 怎么使用#

安装并启动 Redis;项目中引入依赖(如 spring-boot-starter-data-redis);配置连接(application.ymlredis.properties);在 Service/Mapper 层通过模板或客户端读写缓存。

3. 应用场景有哪些#

结构场景
StringJSON 对象缓存、计数器、点赞数
List队列/栈、朋友圈点赞列表
Hash存对象字段、分组
Set去重、共同关注
ZSet排行榜

示例:内容 user:x:post:x,点赞 post:x:good 用 List 存头像或用户 id。

4. 为什么 Redis 单线程还那么快#

  1. 数据在内存
  2. IO 多路复用(epoll)
  3. 单线程无锁,无上下文切换竞争

5. Redis 可以进行发布订阅吗#

可以 Pub/Sub。哨兵节点每 2s 向频道发布对主节点的判断,其他哨兵订阅实现互相监控。相比 Kafka/RocketMQ 较简单,无堆积与回溯;适合通知,不适合可靠消息队列。


持久化与高可用#

6. Redis 能否持久化?如何实现#

可以,两种方式:

方式说明优点缺点
RDBbgsave fork 写快照,定时全量紧凑、恢复快非实时,fork 开销
AOF每条写命令追加日志更实时文件大,需 rewrite,恢复慢

7. 主从复制模式下,主挂了怎么办#

使用 哨兵模式(Sentinel):哨兵监控主从及其他哨兵,主节点故障时自动故障转移,选举新主。

8. 哨兵模式实现原理(2.8+)#

  1. 三个定时任务:10s INFO;2s 频道广播主观判断;1s PING 心跳
  2. 主观下线:单哨兵认为节点不可达
  3. 客观下线:主节点主观下线且半数以上哨兵同意
  4. 选举领导者:类似 Raft,获半数票者执行转移
  5. 故障转移:从从库选新主

9. Redis 集群原理(3.0+,虚拟槽)#

16384 槽分片;节点 ping/pong 传播槽与状态;pfail(主观)→ fail(客观,过半)→ 选举领导者 → 提升从节点为新主。与哨兵类似,面向分片 + 高可用


缓存策略与问题#

10. 缓存更新策略(与 MySQL 一致性)#

  • 过期剔除:TTL、惰性 + 定期删除
  • 更新策略:Cache Aside(先更 DB 再删缓存)、延迟双删、订阅 binlog 异步更新等
  • 内存淘汰allkeys-lruvolatile-lru 等(内存满时)

过期为何内存仍高:惰性删除未访问的 key 仍在;定期删除只抽样部分 key。

10.1 Key 过期清除策略#

  • 惰性过期:访问时才判断是否过期
  • 定期过期:周期扫描 expires 字典部分 key

两者结合,平衡 CPU 与内存。

10.2 Redis 内存淘汰策略#

noeviction(默认,写入报错)、allkeys-lruallkeys-randomvolatile-lruvolatile-randomvolatile-ttl

11. 缓存粒度控制#

  • :整页/整对象一个 key,命中高,更新成本高
  • :按字段或实体拆分,灵活,key 多、管理复杂

按更新频率和读模式权衡。

12. 如何防止缓存穿透#

查询不存在的数据,缓存与 DB 都不命中,大量请求压垮 DB。

  • 缓存空值:简单,需短 TTL,防占满内存
  • 布隆过滤器:预判 key 是否存在,实现较复杂

13. 无底洞优化#

集群节点过多,批量操作跨节点网络次数增加,延迟上升。优化:控制 key 分布、hash tag 相关 key 同槽、减少过大集群分片、合并批量请求。

14. 雪崩优化#

缓存大面积失效或 Redis 宕机,请求打到 DB 导致级联故障。

  • 过期时间加随机
  • 集群高可用 + 限流降级
  • 多级缓存、热点永不过期(逻辑过期)

15. 热点 key 优化#

单个 key QPS 极高(热搜、爆款)。

  • 本地缓存(Caffeine)
  • 多副本 key 分散读
  • 互斥重建、逻辑过期防击穿
文章目录

文章目录