土法炼钢兴趣小组的算法知识备份

【Redis / 缓存内核】事件循环 · 对象编码 · 淘汰 · RDB/AOF · Cluster

文章导航

分类入口
databasestorage
标签入口
#redis#memcached#cache#sds#listpack#skiplist#aof#rdb#eviction#cluster#persistence#in-memory

目录

Redis / 缓存内核:事件循环 · 对象编码 · 淘汰 · RDB/AOF · Cluster

读者读完 缓存架构 的 Cache-Aside / 击穿雪崩,或 缓存工程 的多级缓存之后,对「怎么用 Redis」往往已经有直觉,但对 一条命令如何经事件循环落到内存对象、encoding 如何升级、maxmemory 近似 LRU 与真 LRU 差在哪、AOF everysec 实际丢什么 仍缺源码级地图。站内 linux/redis-source 是 Redis 4.0 Org 情景漫游,不能替代 7.4/8.x 生产路径。

本系列不写 Spring Cache cookbook,也不重复 architecture/17 的五种读写模式全文,写:

系列状态:已完成(2026-07-13)。全 16 篇正文均已发布,可点进阅读。

版本锚定:Redis OSS 7.4 / 8.x(源码路径与官方文档);Memcached 作第 14 篇对照。本机实验以 redis-server 为准;未部署时不伪造 INFO / benchmark 数字。

适合谁看

推荐阅读路径

路径 篇目 适合
从缓存架构下沉 1 → 2 → 3 → 8 → 11 → 16 后端 / 平台
数据结构专项 3 → 4 → 5 → 6 从算法篇来
持久化专项 9 → 10 → 11 → 15 DBA / 可靠性
Cluster 专项 2 → 12 → 13 → 16 集群运维
完整通读 1 → … → 16 系统掌握

一、五个关键问题

  1. 内存里的「一个 key」实际是什么编码? → 第 1、3、4、5、6 篇
  2. 一条命令如何从 socket 落到对象突变?单线程神话边界在哪? → 第 2、15 篇
  3. maxmemory 淘汰与 TTL 过期如何近似实现?与 OS/算法篇 LRU 差在哪? → 第 7、8 篇
  4. RDB / AOF / 混合持久化各自保证什么?fsync 失败语义如何落到配置? → 第 9、10、11 篇(对读 fsyncgatedata-integrity
  5. 主从与 Cluster 如何改写多 key 原子性?何时该上 Memcached? → 第 12、13、14、16 篇

二、篇目依赖

flowchart TD
  A["01 缓存服务器全景"] --> B["02 事件循环与 I/O"]
  B --> C["03 对象模型与 SDS"]
  C --> D["04 Dict 渐进 rehash"]
  D --> E["05 紧凑编码"]
  E --> F["06 ZSet 与 Stream"]
  F --> G["07 TTL 与过期"]
  G --> H["08 maxmemory 淘汰"]
  H --> I["09 RDB"]
  I --> J["10 AOF"]
  J --> K["11 混合持久化"]
  K --> L["12 复制"]
  L --> M["13 Cluster"]
  M --> N["14 Memcached 对照"]
  N --> O["15 生产排障"]
  O --> P["16 选型阅读地图"]

跨系列:architecture/17 → 01/14/16;algorithms/07,18 → 04/06;fsyncgate → 11。

三、目录与每篇价值点

第一部分:模型与执行路径

  1. 缓存服务器全景:HashMap · Memcached · Redis · 嵌入 KV
    • 四类内存 KV 生态位;与 architecture/17、storage/66、旧 redis-source 分工;16 篇地图。
  2. 事件循环与 I/O:ae · 客户端缓冲 · IO threads
    • 「单线程」精确含义;文件/时间事件;IO threads 只卸载读写不执行命令。

第二部分:内存数据结构

  1. 对象模型与 SDS:redisObject · type · encoding
    • 多态编码入口;SDS 二进制安全与头部布局;OBJECT ENCODING
  2. Dict 与渐进 rehash:双 ht 与摊销扩容
    • 对读 algorithms/07;rehash 步进如何避免延迟尖刺。
  3. 紧凑编码:listpack · quicklist · intset
    • ziplist 历史边界;小集合省内存、大集合升级触发。
  4. ZSet 与 Stream:skiplist · rax · 消费组
    • Pugh 跳表工程落地;Stream 最小必要集(不扩成 MQ 全书)。

第三部分:过期、淘汰与内存

  1. TTL 与过期:惰性删除 · 主动采样 · lazyfree
    • expires dict;定时采样偏差;异步释放与延迟。
  2. maxmemory 策略:近似 LRU/LFU 与 MEMORY DOCTOR
    • volatile/allkeys 矩阵;与真 LRU/ARC 对照;淘汰不等于过期。

第四部分:持久化

  1. RDB:fork COW · BGSAVE · 快照格式
    • 子进程快照代价;无盘场景边界。
  2. AOF:命令日志 · rewrite · appendfsync
    • always / everysec / no 丢失窗口;rewrite 尖刺。
  3. 混合持久化与崩溃语义
    • RDB preamble + AOF;对读 fsyncgate;配置决策树。

第五部分:复制、集群与收束

  1. 复制:PSYNC · backlog · 副本语义
    • 全量/部分重同步;副本滞后与读己之写。
  2. Cluster:16384 slot · MOVED/ASK · 多 key 约束
    • 服务端 hash slot vs 客户端一致性哈希;同槽原子性边界。
  3. Memcached 对照:多线程 · slab · 纯缓存
    • 何时 vs 数据结构丰富度;何时不该上 Redis。
  4. 生产排障:大 key · fork · 慢日志 · 碎片
    • LATENCY / SLOWLOG / INFO 可读信号;本机复现清单。
  5. 选型与阅读地图
    • standalone / Sentinel / Cluster;Valkey 一句;模块边界;开放争论。

四、与相邻系列的分工

话题 本系列 相邻系列
Cache-Aside / 击穿雪崩 引用,不重写 architecture/17
多级缓存工程 引用 storage/66
跳表 / 哈希证明 引用 algorithms/1807
fsync 失败语义 第 11 篇落地配置 fsyncgate
Redis 4.0 情景 第 1 篇历史入口 linux/redis-source
磁盘 LSM 嵌入 KV 第 1 篇对照 rocksdb

参考


返回 数据库索引 · 缓存架构 · RocksDB 内核

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。


By .