深入Redis源码,揭秘面试高频考点,分享核心知识,助你技术进阶

文章导读
Redis作为高性能的内存数据库,其单线程事件模型是面试高频考点。核心在于通过epoll实现非阻塞I/O和事件驱动,避免多线程的锁竞争。源码中server.c文件初始化事件循环,ae.c模块封装了事件处理,select/epoll/kqueue三种机制根据平台选择。单线程高效处理多连接,时间复杂度O(N)降到O(1),这就是为什么Redis能达到10w+ QPS。
📋 目录
  1. 数据结构实现详解
  2. 持久化机制RDB和AOF
  3. 主从复制与哨兵高可用
  4. 集群模式源码剖析
  5. 内存管理与淘汰策略
  6. 事务与Lua脚本
A A

Redis作为高性能的内存数据库,其单线程事件模型是面试高频考点。核心在于通过epoll实现非阻塞I/O和事件驱动,避免多线程的锁竞争。源码中server.c文件初始化事件循环,ae.c模块封装了事件处理,select/epoll/kqueue三种机制根据平台选择。单线程高效处理多连接,时间复杂度O(N)降到O(1),这就是为什么Redis能达到10w+ QPS。

数据结构实现详解

Redis的5大基础数据类型源码实现:SDS(简单动态字符串)替换C字符串,server.h中struct sdshdr,预分配空间+len+alloc字段,避免malloc/realloc开销。链表adlist.h双向链表,支持头尾操作。哈希表dict.c,渐进式reash,链地址法解决冲突,rehash时分步迁移避免阻塞。跳表skiplist.c用于有序集合,概率层级O(logN)插入查找。ziplist/integer数组压缩小数据节省内存。

持久化机制RDB和AOF

RDB快照rdb.c,通过fork子进程后台bgsave,主进程继续服务。fork复制页表,写时复制COW机制最小化开销。AOF aof.c记录每条写命令,fsync策略always/everysec/no。重写bgrewriteaof压缩命令序列,减少文件体积。混合模式从Redis4.0,RDB头+AOF尾,结合两者优势恢复更快。

深入Redis源码,揭秘面试高频考点,分享核心知识,助你技术进阶

主从复制与哨兵高可用

复制replication.c,全量同步psync发送RDB,从量增repl_backlog_buffer环形缓冲增量同步。部分重同步replconf ack确认机制。哨兵sentinel.c监控主从故障,主观下线sdown客观下线odown,协商选举leader发起failover。sentinel.conf配置quorum等参量。

集群模式源码剖析

cluster.c模块,16384槽CRC16哈希分配,gossip协议节点通信meet/ping/pong消息。故障转移CTF,需多数节点认可。ASK重定向MOVED永久槽迁移。CRDB一致性读,避免读到旧数据。cluster-node-timeout参数影响可用性。

深入Redis源码,揭秘面试高频考点,分享核心知识,助你技术进阶

内存管理与淘汰策略

jemalloc集成eviction.c,8种策略volatile-lru等。evict处理触发when内存超maxmemory。active expire扫描键秒杀过期key,被动expire命令触发。memtest内置测试工具验证分配器。

深入Redis源码,揭秘面试高频考点,分享核心知识,助你技术进阶

事务与Lua脚本

multi/exec实现乐观锁watch/unwatch监控键变化。脚本server.lua_register,原子执行EVAL,脚本缓存SHA1哈igest。阻塞式事务中止discard。

FAQ
Q: Redis单线程为什么这么快?
A: 非阻塞I/O + 多路复用 + 事件驱动 + 纯内存操作,无上下文切换。
Q: RDB和AOF哪个更好?
A: RDB恢复快体积小,AOF数据安全,可结合使用。
Q: 集群如何保证数据一致性?
A: 异步复制,最终一致,多数派确认写入。
Q: 内存不足时怎么处理?
A: 配置maxmemory-policy,选择LRU等策略淘汰键。