Redis面试题深度解析

2025年 阅读约 13 分钟 面试指南 · 数据库面试

深入Redis面试核心考点,涵盖数据类型、持久化、集群、缓存问题等高频面试题,附详细解答。

一句话总结

Redis 是缓存面试的核心,核心考点:5种基本类型+3种特殊类型、持久化(RDB快照 vs AOF日志)、集群(主从+哨兵+Cluster)、缓存三大问题(穿透/击穿/雪崩+解决方案)、双写一致性(Cache Aside + 延迟双删)。

数据类型

五种基本类型:

String:最基础类型,可存字符串、数字、JSON。常用命令SET/GET/INCR。

Hash:键值对集合,适合存对象。HSET/HGET/HMGET。

List:有序可重复列表,LPUSH/RPOP实现队列。

Set:无序不重复集合,SADD/SMEMBERS/SINTER。

ZSet:有序不重复集合,带分数排序。ZADD/ZRANGEBYSCORE。

三种特殊类型:HyperLogLog(基数统计)、Bitmap(位操作)、GEO(地理位置)。

持久化机制

RDB:定时快照,fork子进程写磁盘。恢复快,但可能丢失最后一次快照后的数据。

AOF:追加写日志,三种刷盘策略:always/everysec/no。数据更安全,文件更大。

混合持久化:Redis 4.0引入,RDB格式写AOF文件,兼顾恢复速度和数据安全。

面试重点:RDB和AOF的优缺点对比、选择策略、AOF重写机制。

集群方案

主从复制:全量同步+增量同步。主节点写,从节点读,实现读写分离。

哨兵模式:监控主节点,自动故障转移。至少3个哨兵节点。

Cluster模式:16384个哈希槽分布到多个节点,支持横向扩展。每个节点负责一部分槽。

数据分片:hash_slot = CRC16(key) % 16384

缓存经典问题

缓存穿透:查询不存在的数据,请求直达数据库。解决:布隆过滤器、缓存空值。

缓存击穿:热点key过期,大量请求直达数据库。解决:互斥锁、永不过期+异步更新。

缓存雪崩:大量key同时过期。解决:过期时间加随机值、多级缓存、熔断降级。

双写一致性:Cache Aside Pattern:先更新数据库,再删除缓存。延迟双删保证最终一致性。

实战场景

场景:缓存穿透解决方案(布隆过滤器 + 空值缓存)

// 方案1:缓存空值(简单有效) public String getData(String key) { String value = redis.get(key); if (value != null) return "NULL".equals(value) ? null : value; value = db.query(key); if (value == null) { redis.setex(key, 60, "NULL"); // 缓存空值60秒 return null; } redis.set(key, value); return value; } // 方案2:布隆过滤器(内存高效) // 使用 Redisson 的 RBloomFilter RBloomFilter<String> filter = redisson.getBloomFilter("idFilter"); filter.tryInit(1000000L, 0.03); // 100万数据,3%误判率 public String getDataWithBloom(String key) { if (!filter.contains(key)) return null; // 一定不存在 // 可能存在,查缓存+数据库 return getData(key); }