Redis架构面试细节精讲,分享核心妙计与实战经验,助你面试脱颖而出

文章导读
Redis的核心架构是单线程事件驱动模型,这让它在高并发场景下表现出色。面试时要强调:主线程负责读写,IO多路复用处理事件,避免上下文切换。哨兵模式用于高可用,主从复制异步进行,读写分离减轻主节点压力。集群模式用16384个槽位哈希分片,自动故障转移。实战妙计:用pipeline批量命令减少RTT,用Lua脚本原子执行复杂逻辑,避免竞态。持久化选RDB快照备份,AOF日志重放恢复,根据场景混合用。
📋 目录
  1. 单线程模型详解
  2. 主从复制与哨兵
  3. 集群架构深入
  4. 内存管理与淘汰
  5. 持久化机制实战
  6. 高可用与性能优化
  7. FAQ
A A

Redis的核心架构是单线程事件驱动模型,这让它在高并发场景下表现出色。面试时要强调:主线程负责读写,IO多路复用处理事件,避免上下文切换。哨兵模式用于高可用,主从复制异步进行,读写分离减轻主节点压力。集群模式用16384个槽位哈希分片,自动故障转移。实战妙计:用pipeline批量命令减少RTT,用Lua脚本原子执行复杂逻辑,避免竞态。持久化选RDB快照备份,AOF日志重放恢复,根据场景混合用。内存优化用ziplist压缩小集合,bigkey拆分防阻塞。

单线程模型详解

Redis单线程模型是其高性能关键,避免了多线程的锁竞争。事件循环用epoll/select处理socket事件,主线程非阻塞执行命令。面试常问:为什么单线程快?答:无锁、无上下文切换,CPU缓存友好。多线程IO在6.0引入,但核心仍单线程。实战:监控slow log,优化慢命令如KEYS*用SCAN代替。

主从复制与哨兵

主从复制:slaveof命令全量同步+增量PSYNC,主节点fork子进程发RDB,从节点清空加载后命令流式同步。断线重连用replconf ack心跳。哨兵:选举通过raft-like算法,客观下线需多数票+延迟确认,主观超时客观下线分离。实战经验:部署3-5哨兵奇数,避免脑裂;从节点只读配置min-slaves-to-write。

集群架构深入

Redis Cluster:CRC16(key)%16384定槽,{hash_tag}支持多key同一槽。gossip协议节点通信,心跳每秒10次,故障时多数派选举master。迁移槽用migrate命令。妙计:预分片均匀分布,避免热点key用twemproxy或envoy代理。面试脱颖:谈cluster meet/bootstap,手动reshard实战。

Redis架构面试细节精讲,分享核心妙计与实战经验,助你面试脱颖而出

内存管理与淘汰

内存分jemalloc管理,对象编码int/str/ziplist/ziplist优化空间。淘汰策略:volatile-lru/ttl键LRU,allkeys-random随机。bigkey问题:用redis-cli --bigkeys扫描,拆分list用listpack,hash用hashziplist。实战:设置maxmemory-policy,监控used_memory_rss,主动expire键释放内存。

持久化机制实战

RDB:save/BGSAVE,fork后子进程dump,fsync策略everysec安全。AOF:appendfsync everysec,BGREWRITEAOF重写压缩。混合:AOF用RDB快照更快恢复。面试细节:fork耗时长大内存慎用,AOF重写阻塞风险用no-appendfsync-on-rewrite。妙计:脚本定时dump+备份异地。

Redis架构面试细节精讲,分享核心妙计与实战经验,助你面试脱颖而出

高可用与性能优化

高可用:哨兵+集群,VIP漂移或proxy如twemproxy。性能:pipeline降网络往返,MULTI/EXEC事务原子但不ACID,WATCH乐观锁。Lua脚本无网络开销。实战经验:热点key本地缓存,布隆过滤器防穿透,连接池复用连接。监控INFO/memory/stats,latency doctor诊断。

FAQ

Q: Redis单线程如何高并发?
A: 事件驱动非阻塞IO,单线程处理万级连接,命令O(1)快速。

Q: 主从延迟怎么处理?
A: 监控repl_lag,读从节点带延迟容忍,用wait命令同步。

Redis架构面试细节精讲,分享核心妙计与实战经验,助你面试脱颖而出

Q: 集群key分布不均怎么办?
A: 用hash tag {}确保相关key同槽,定期checkslot均衡。

Q: 内存不足时怎么选淘汰策略?
A: 数据集全内存用allkeys-lru,部分有TTL用volatile-lru。