一、Redis为何成为面试必考题?
Redis 作为高性能内存数据库,在互联网公司使用率高达90%(数据来源:DB-Engines 2023)。掌握Redis已成为中高级开发者的硬性要求,面试必问的三大原因:
- 性能标杆:单机10万+ QPS
- 架构核心:缓存、分布式锁、限流等关键场景
- 设计典范:单线程模型、高效数据结构的经典实现
二、Redis核心五重奏(附思维导图)
1. 数据结构与底层实现
数据类型 | 底层结构 | 典型场景 | 高频考点 |
---|---|---|---|
String | SDS动态字符串 | 计数器、分布式锁 | SDS vs C字符串优势 |
Hash | 哈希表+ziplist | 对象存储(用户信息) | ziplist压缩条件 |
List | quicklist | 消息队列、最新消息 | 快速链表实现原理 |
Set | hashtable+intset | 抽奖、共同关注 | 集合运算时间复杂度 |
ZSet | 跳表+哈希表 | 排行榜、延迟队列 | 跳表查询效率为什么是O(logN) |
经典面试题:
bash
# 用Redis实现延迟队列(ZSET示例)
ZADD delay_queue 1640995200 "task1"
ZRANGEBYSCORE delay_queue 0 <current_timestamp> WITHSCORES
2. 持久化机制对决
RDB vs AOF对比表:
维度 | RDB快照 | AOF日志 |
---|---|---|
数据完整性 | 可能丢失分钟级数据 | 最多丢失1秒数据 |
恢复速度 | 快 | 慢 |
文件体积 | 小(二进制压缩) | 大(文本日志) |
写性能影响 | 高(fork子进程) | 低(追加写入) |
混合持久化配置:
properties
# redis.conf
aof-use-rdb-preamble yes # 开启混合模式
3. 高可用三剑客
架构对比:
- 主从复制:数据备份,读写分离
- 哨兵模式:自动故障转移,最少3节点
- Cluster集群:数据分片(16384 slots),去中心化
脑裂问题解决方案:
properties
min-slaves-to-write 1 # 至少1个从节点同步
min-slaves-max-lag 10 # 数据复制延迟不超过10秒
4. 缓存三大经典问题
问题类型 | 现象 | 解决方案 |
---|---|---|
缓存雪崩 | 大量key同时过期 | 随机过期时间 + 永不过期热点数据 |
缓存穿透 | 查询不存在的数据 | 布隆过滤器 + 空值缓存 |
缓存击穿 | 热点key过期后高并发查询 | 互斥锁 + 逻辑过期时间 |
布隆过滤器实现示例:
java
// 使用Redisson客户端
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("userFilter");
bloomFilter.tryInit(100000L, 0.03); // 10万数据,3%误判率
bloomFilter.add("user1");
if(bloomFilter.contains("user2")) { /* 可能存在 */ }
5. 内存管理机制
- 淘汰策略:8种策略(volatile-lru/allkeys-lfu等)
- 内存优化:使用Hash类型存储对象比String节省**50%**内存
- BigKey检测 :
redis-cli --bigkeys
分析
三、Redis 6.x 新特性(加分项)
- 多线程IO:网络IO处理多线程(执行命令仍单线程)
- 客户端缓存:Client-side caching(Tracking机制)
- ACL权限控制:精细化权限管理
- SSL支持:增强网络安全性
四、高频面试题Top10(附答案模板)
- Redis为什么快?(内存操作/IO多路复用/单线程避免竞争)
- 如何保证缓存与数据库双写一致性?(延迟双删/订阅binlog)
- Redis事务为什么不支持回滚?(保持简单高效的设计哲学)
- 怎么用Redis实现分布式锁?(SETNX + Lua脚本)
- Pipeline有什么作用?(批量命令减少网络往返时间)
- 什么是RedLock算法?(多节点获取锁机制)
- 如何实现附近的人功能?(GEO模块 + GEOHASH)
- 大Key删除有什么风险?(阻塞线程,渐进式删除方案)
- Redis的哈希槽是什么?(Cluster分片单位,16384个)
- 怎么实现异步队列?(List阻塞弹出 + 多消费者)
五、实战案例:电商系统Redis应用
- 秒杀系统:Lua脚本实现库存原子性扣减
- 会话管理:Hash存储用户登录态
- 商品详情页缓存:多级缓存架构(本地缓存+Redis)
- 排行榜:ZSET实时更新热销商品
六、学习路线推荐
- 入门:《Redis设计与实现》(黄健宏著)
- 进阶:Redis官方文档(https://redis.io)
- 实战:GitHub开源项目(如秒杀系统实现)
- 源码:阅读Redis 6.x源码(重点看事件循环、数据结构)