Redis 完全指南:从数据结构底层到云原生生产实战
系统掌握 Redis 全貌:SDS/跳表/listpack/Hash表底层源码、RDB/AOF持久化原理、主从复制与 Sentinel/Cluster 高可用、ae 事件循环源码、内存淘汰策略、Lua/事务/Pub-Sub、RedisSearch/JSON 模块、Java/Python/Go 客户端对比、Aerospike/Dragonfly/Valkey 竞品分析、云厂商改造(Tair/MemoryDB)、缓存设计模式、分布式锁、10大业务场景、10个生产事故复盘。43章完全免费。
43
章节
免费
永久
目录
Ch01
Redis 不只是缓存
Redis 六大使用场景,单线程为何比多线程快,事件驱动架构设计哲学,与 MySQL/MongoDB 的分工边界,何时用 Redis 何时不该用
Ch02
开源竞品全景:Memcached、Aerospike、Dragonfly、Valkey、KeyDB
六大竞品功能矩阵与性能基准,Aerospike 混合存储架构(内存索引+SSD数据)深度解析,Dragonfly 多线程 Actor 模型,Valkey 分裂始末,选型决策树
Ch03
云厂商托管与改造:ElastiCache、MemoryDB、阿里云 Tair
AWS ElastiCache vs MemoryDB(Raft持久化)差异,阿里云 Tair 六大扩展数据类型(TairHash/TairString/TairZset),Redis 许可证风波与 Valkey 分裂,各云厂商选型对比
Ch04
redisObject 对象系统:12种编码与内存布局
robj 结构体字段逐字节解析,12种 OBJ_ENCODING_* 自动升降级触发条件,0-9999 共享整数池,embstr vs raw 切换阈值,LRU/LFU 字段复用 24bit 的精妙设计
Ch05
SDS 动态字符串:为什么不用 C string
sdshdr5/8/16/32/64 五种头结构,__attribute__((packed)) 内存对齐,空间预分配与惰性释放策略,二进制安全,O(1) 获取长度,SDS 与 C string 的互操作
Ch06
listpack 与 ziplist:级联更新灾难与修复
ziplist 字节布局(zlbytes/zltail/zllen/entry/zlend),prevlensize 级联更新 O(n) 最坏情况,listpack 如何通过取消 prevlen 彻底修复,encoding 字段复用设计
Ch07
跳表 skiplist:为什么不用红黑树
跳表 vs 红黑树 vs B+树的选择理由(范围查询+实现简单+并发友好),zskiplistNode 结构(backward指针+level[]柔性数组),随机层高算法,ZRANGE 源码走读
Ch08
quicklist:listpack + 双端链表的混合设计
quicklistNode 与 quicklist 结构,fill 参数控制节点大小,LZF 压缩冷节点,list-max-listpack-size 与 list-compress-depth 配置原理,List 编码升级触发条件
Ch09
Hash 表与渐进式 rehash
dictht/dictEntry/dict 三层结构,两个 ht 数组的渐进式 rehash 时机(CRUD 单步+定时批量),负载因子触发条件,字典迭代器安全性,listpack → hashtable 编码升级
Ch10
Bitmap、HyperLogLog 与 GEO:三种特殊数据类型
Bitmap SETBIT/BITCOUNT/BITOP 底层 SDS 存储,HyperLogLog 基数估算原理(LogLog算法+稠密/稀疏编码),GEO GeoHash 52bit 编码,GEORADIUS 范围查询实现
Ch11
Stream:Kafka 式消息流在 Redis 中的实现
Radix Tree + listpack 双层存储结构,Stream Entry ID 设计,Consumer Group 内部实现,XADD/XREAD/XACK/XPENDING 语义,PEL 待确认消息列表,与 Kafka 的本质差异
Ch12
命令执行全链路:从 TCP 字节到 +OK 回包
TCP 字节 → RESP 解析 → readQueryFromClient → processCommand → lookupCommand → setCommand → 编码选择 → 过期时间写入 → AOF 传播 → 从库传播 → addReply 完整链路源码
Ch13
RDB 快照:fork、COW 与文件格式
BGSAVE fork() + Copy-On-Write 机制,rdbSave 编码规则(RDB_TYPE_STRING/LIST/HASH 等),RDB 文件头/EOF/CRC64 结构逐字节,BGSAVE 触发条件与 save 配置,RDB 文件修复
Ch14
AOF 持久化:写后日志与 rewrite 机制
三种 fsync 策略(always/everysec/no)性能与安全权衡,AOF rewrite fork+cow+增量缓冲区,aof-use-rdb-preamble 混合持久化,AOF 文件结构与手动修复
Ch15
持久化选型与灾难恢复
RDB vs AOF vs 混合持久化数据安全等级矩阵,不同业务场景选型指南,redis-check-rdb/aof 工具使用,生产备份策略(本地+远程+定时),数据恢复演练
Ch16
主从复制:PSYNC2 协议与复制积压缓冲区
主从握手完整流程(PING→AUTH→REPLCONF→PSYNC),全量同步 vs 部分重同步,replication offset,repl_backlog 环形缓冲区大小计算,replid 与 replid2
Ch17
复制延迟、一致性与数据丢失场景
异步复制数据丢失四种场景模拟,min-replicas-to-write + min-replicas-max-lag 保护机制,WAIT 命令同步等待语义,复制积压溢出导致全量重同步,主从延迟监控
Ch18
Sentinel 哨兵:Raft 选主与 failover 状态机
三个定时任务(INFO/PING/PUBLISH),主观下线 sdown vs 客观下线 odown,Raft 协议在 Sentinel 中的简化实现,failover 九步状态机,配置纪元 epoch,客户端连接切换
Ch19
Redis Cluster:16384 槽与 Gossip 协议
一致性哈希 vs 哈希槽的选择理由,16384 槽的由来,MOVED vs ASK 重定向差异,Gossip PING/PONG/MEET 消息结构,cluster_node 状态字段,clusterCron 定时任务
Ch20
Cluster 故障转移、扩容与数据迁移
pfail/fail 判定流程,从节点选举算法,手动 failover vs 自动 failover,CLUSTER MEET/ADDSLOTS/MIGRATE 在线扩容操作手册,缩容流程,迁移期间 ASK 重定向处理
Ch21
源码阅读环境:编译、调试与核心文件地图
Redis 源码目录结构(server.h/ae.c/t_*.c/networking.c),GDB 断点追踪一条 SET 命令,核心数据结构关系图,从 main() 到 aeMain() 启动链路
Ch22
网络层源码:ae 事件循环与 I/O 多路复用
aeEventLoop 结构体,aeFileEvent/aeTimeEvent 链表,epoll/kqueue/select 封装层,aeProcessEvents 主循环(beforeSleep+epoll_wait+afterSleep),多线程 I/O 线程协同
Ch23
Cluster Gossip 源码:节点状态机与消息传播
clusterCron 执行节点,PING 消息体构造(随机选 1/10 节点),clusterProcessGossipSection 消息处理,pfail→fail 判定源码,clusterSendUpdate 传播槽信息
Ch24
内存分配与 jemalloc:碎片整理原理
zmalloc 封装层,jemalloc arena/bin/chunk 三层结构,内存碎片率 mem_fragmentation_ratio 计算公式,activedefrag 在线整理工作原理,OBJECT ENCODING/REFCOUNT/IDLETIME 命令
Ch25
过期删除与内存淘汰:8种策略深解
惰性删除(访问时检查)+ 定期删除(hz 控制采样频率)双机制,expires 字典设计,8种 maxmemory-policy 对比,LRU 近似算法(随机采样池),LFU Morris 计数器衰减算法
Ch26
多线程 I/O:Redis 6+ 的架构演进
为何命令执行仍然单线程(原子性保证),I/O 线程只负责读写不执行命令,io-threads 配置与性能收益,主线程与 I/O 线程的协调锁,与 KeyDB/Dragonfly 全多线程对比
Ch27
MULTI/EXEC、Lua 与 Function
QUEUED 命令队列,WATCH 乐观锁 CAS 实现,MULTI/EXEC 的原子性边界(非回滚),Lua 脚本原子性保证,EVALSHA 缓存,Redis 7 Function 替代 Lua 的改进点
Ch28
Pub/Sub 与 Sharded Pub/Sub
SUBSCRIBE/PUBLISH/PSUBSCRIBE 底层 dict 实现,消息积压无持久化的设计权衡,Cluster 模式下全节点广播的性能瓶颈,Redis 7 Sharded Pub/Sub(SSUBSCRIBE)按槽路由
Ch29
Redis Modules:RedisSearch、RedisJSON 与 RedisTimeSeries
Module API 扩展机制,RedisSearch 全文搜索(倒排索引+向量搜索 KNN),RedisJSON 原生 JSON 路径查询,RedisTimeSeries 时序压缩存储,RedisBloom 可扩容布隆过滤器,与 Elasticsearch 对比
Ch30
Key 设计与数据建模:避开所有常见陷阱
命名规范(业务:实体:id 层次结构),序列化选型(JSON vs Protobuf vs MessagePack 压缩率+速度对比),Hot Key 成因与拆分方案,Big Key 定义与预防,Key 过期设计原则
Ch31
Java 客户端:Jedis、Lettuce 与 Redisson
Jedis 连接池(JedisPool GenericObjectPool原理),Lettuce 基于 Netty 的异步响应式模型,Redisson 分布式对象(RLock/RMap/RQueue),三者性能对比与选型场景,Spring Data Redis 集成
Ch32
多语言客户端:redis-py、ioredis 与 go-redis
redis-py 连接池与异步 aioredis,ioredis(Node.js)集群自动重定向与 Pipeline,go-redis v9 泛型 API 与 Hook 拦截器,各语言常见坑与最佳实践
Ch33
RESP 协议、Pipeline 与连接池调优
RESP2 vs RESP3 协议差异(Push消息/富类型),Pipeline 批量请求 RTT 优化原理,Pipeline vs MULTI 区别,连接池 maxIdle/minIdle/maxWait 参数含义,连接泄漏排查
Ch34
缓存穿透、击穿与雪崩:原理与解决方案
三种缓存问题根因与模拟场景,布隆过滤器防穿透(误判率计算),互斥锁防击穿(setnx实现)vs 逻辑过期方案对比,随机TTL防雪崩,设计决策流程图
Ch35
分布式锁完全指南:从 SETNX 到 Redisson
SET NX PX 原子性保证,锁超时与业务超时的矛盾,Redisson WatchDog 自动续期机制,Redlock 算法原理及 Martin Kleppmann 的批判,什么场景不需要 Redlock
Ch36
10 大业务场景实现:排行榜到实时限流
排行榜(ZSET分页),用户签到(Bitmap),UV统计(HyperLogLog),附近的人(GEO),抢购秒杀(Lua原子扣减),社交关系(SADD/SINTER/SUNION),消息队列(List vs Stream对比),Session共享,令牌桶限流(Lua脚本),实时计数(INCR+滑动窗口)
Ch37
Pipeline、批量操作与性能优化
Pipeline 减少 RTT 原理,大批量写入最佳实践(MSET/Pipeline/Lua),SCAN 替代 KEYS 的安全性,集群模式 Pipeline 的限制(HashTag 解决方案),redis-benchmark 压测方法论
Ch38
慢查询与大 Key 分析
slowlog-log-slower-than 配置,SLOWLOG GET 解读,redis-cli --bigkeys/--hotkeys 工作原理,OBJECT FREQ/IDLETIME 命令,内存分析工具(rdb-tools/redis-rdb-cli),big key 拆分实战
Ch39
监控体系:Prometheus + Grafana + 告警规则
INFO 各段(server/clients/memory/stats/replication)关键指标含义,redis_exporter 配置,Grafana Dashboard 模板,五大黄金指标告警规则(内存使用率/连接数/命令延迟/命中率/主从延迟)
Ch40
生产配置与安全加固
bind/requirepass/ACL 用户权限体系,rename-command 隐藏危险命令,TLS 双向认证,maxmemory 计算与预留,vm.overcommit_memory/transparent hugepage 内核参数,生产安全 Checklist 25条
Ch41
Redis 7 新特性:Function、Sharded Pub/Sub 与 listpack
Function 替代 Lua(持久化+库管理),Sharded Pub/Sub(SSUBSCRIBE 按槽路由),listpack 全面替换 ziplist,ACL 改进,Multi-Part AOF,LMPOP/ZMPOP 新命令
Ch42
Redis in Kubernetes:StatefulSet 与持久化存储
为何必须用 StatefulSet(稳定网络标识+持久卷),Redis Operator(redis-operator/spotahome)对比,PVC 动态供给,ConfigMap 配置管理,K8s Service 与 Cluster 路由,资源限制与 OOM 预防
Ch43
生产故障复盘:10 个真实案例根因分析
bigkey 导致主线程阻塞、repl backlog 打满引发全量重同步、热key击穿数据库、Lua 脚本死锁、集群脑裂双写、内存碎片率飙升 OOM、KEYS 命令阻塞、连接数耗尽、AOF rewrite 磁盘打满、K8s Deployment 误用导致数据丢失