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

【Redis / 缓存内核】选型与阅读地图:standalone · Sentinel · Cluster · Valkey

文章导航

分类入口
databasestorage
标签入口
#redis#valkey#sentinel#cluster#standalone#engine-selection#modules#reading-map#rocksdb

目录

十六篇走到这里,问题不应是「Redis 好不好」,而是 你的失效代价、数据结构需求、团队运维半径 落在哪一格。本篇不重复 缓存架构 的五种读写模式全文,也不替代官方托管 SLA;只做 部署形态决策树生态分叉一句模块与争论边界,并把读者送回系列内外的下一步。

本文是「Redis / 缓存内核」系列第 16 篇(共 16 篇)。→ 系列目录

版本锚定:Redis OSS 7.4 / 8.x;Valkey 以 Linux Foundation 托管的 OSS 分叉为语境(具体发行版以你方镜像为准)。


一、选型决策树

flowchart TD
  Start["Need in-memory KV?"] --> Q1{"Values rebuildable from DB?"}
  Q1 -->|yes, blob only| MC["Consider Memcached / pure cache"]
  Q1 -->|no or rich types| Q2{"Need structures / Lua / modules?"}
  Q2 -->|yes| RD["Redis family"]
  Q2 -->|no| MC
  RD --> Q3{"Write QPS fits one primary?"}
  Q3 -->|yes| Q4{"Need auto failover?"}
  Q4 -->|no| SA["Standalone + manual DR"]
  Q4 -->|yes| SEN["Sentinel"]
  Q3 -->|no| CL["Cluster"]
  RD --> Q5{"Durability RPO?"}
  Q5 -->|zero loss| AOF["AOF always + WAIT / managed sync"]
  Q5 -->|seconds| MIX["RDB + AOF everysec / hybrid"]
  Q5 -->|cache only| NOP["no persistence"]
形态 适用 主要代价
Standalone 开发、低 QPS、可接受手动故障 单点;复制需自管
Sentinel 单分片生产、要自动 failover 不解决写扩展;客户端需 Sentinel 感知
Cluster 写/内存超单机、接受 slot 约束 运维与客户端复杂度;CROSSSLOT、迁移期 ASK
Memcached 纯 Cache-Aside blob(第 14 篇 无结构与持久化
托管 Redis 团队不想自管 failover/fsync 成本与供应商锁定(本篇不评定价)

二、与 architecture/17 的分工

architecture/17 回答 应用侧 缓存模式(Cache-Aside、击穿雪崩、多级缓存);本系列回答 服务器内核(事件循环、编码、淘汰、持久化、复制、slot)。衔接关系:

架构层问题 应用篇 内核篇
写 DB 还是写缓存 Cache-Aside / Write-through 第 1、14、16 篇
缓存丢失怎么办 回源、降级 RDB/AOF(9–11)、复制(12)
分布式 key 路由 一致性哈希概念 Cluster slot(13)
延迟尖刺 超时、重试策略 排障(15)

若已读完 architecture/17 而 读本系列:建议按 index 推荐阅读路径2 → 8 → 11 → 12 → 13 → 16 最小链。


三、Valkey 与 Redis 生态(一段)

2024 年起,Redis Ltd. 调整 Redis OSS 许可证(RSAL/SSPL 路线,以官方公告为准),Linux Foundation 托管 Valkey 作为 OSS 社区分叉,目标保持 协议与 API 兼容(RESP、主要命令、RDB/AOF 格式在分叉早期仍对齐,具体差异需查各 release note)。对工程团队含义是:客户端驱动、运维脚本、监控指标 大多可复用,但 法务合规、长期 roadmap、企业功能 需分别跟踪 Redis 商业产品与 Valkey 社区版。本篇不展开许可证全文;选型时把 合规审查技术审查 并列,勿假设二者永远字节级一致。


四、模块边界与 Redis Stack

Redis 模块 API 允许在服务器进程内加载 自定义命令与数据类型(JSON、Search、TimeSeries、Bloom 等 Stack 组件)。边界:

在内 在外
单进程内扩展命令、共享事件循环 跨语言业务事务、复杂查询规划器
与原生 encoding 共用内存上限 替代 PostgreSQL / Elasticsearch 全文场景(需自证)
模块级持久化钩子 开箱即用的跨地域多主(Active-Active 属企业/专门产品)

模块 改变 第 2 篇 的主线程执行默认:重模块仍可能抢占主线程时间,排障时用 INFO modulesSLOWLOG 同看。

# 查看已加载模块(名称依安装而定)
redis-cli INFO modules
redis-cli MODULE LIST

五、开放争论(有文献或官方讨论锚点)

  1. 多线程执行 vs 多线程 IO:Redis 7/8 持续扩大 IO threads 与部分路径并行;是否与 Memcached 式 多线程命令执行 收敛,社区仍有性能与锁粒度争论(见 Redis release blog,B 级)。工程判断:CPU 饱和前先分清 网络、命令、持久化 谁占主线程。
  2. AOF always vs everysec:丢失窗口与 fsync 延迟的交换(第 10–11 篇、fsyncgate);无 universal 最优,只有 RPO/RTO。
  3. 读副本 vs 扩展主库:复制滞后 vs 读己之写(第 12 篇);PACELC 式延迟—一致性权衡。
  4. Redlock 与分布式锁:Martin Kleppmann 批评与 Antirez 回应是经典争论;锁语义 不应默认由单线程 Redis 命令保证,需应用层建模。
  5. Cluster vs Proxy:Twemproxy、Envoy、自研 sidecar 在 CROSSSLOT 上的不同拆法;proxy 不自动获得跨槽事务。

六、何时不该用 Redis

第 14 篇 互补,明确 退出条件


七、全系列阅读地图

7.1 本系列 16 篇(按主题)

篇目 一句话
模型 0102 生态位与 ae/IO threads
结构 0306 redisObject 与紧凑编码
内存 0708 TTL 与 maxmemory
持久化 0911 RDB/AOF/混合
分布式 1213 复制与 Cluster
对照运维 1415 Memcached 与排障
收束 16(本篇) 选型与地图

7.2 站外相邻系列

目标 链接
应用缓存模式 architecture/17 缓存架构
多级缓存工程 storage/66 缓存工程
哈希 / 跳表 / 一致性哈希 algorithms/071811
fsync 语义 linux/fsyncgate
磁盘 LSM / 嵌入 KV RocksDB 内核
Redis 4.0 历史漫游 linux/redis-source

7.3 三条延伸路径

  1. 可靠性深化:11 → fsyncgate → storage/12 数据完整性
  2. 分布式深化:13 → algorithms/11 → distributed 系列(共识与复制对比)。
  3. 存储栈下沉:01 → RocksDB index → 磁盘容量与缓存协同。

八、常见误解

误解 事实
「Cluster 解决一切扩展」 单 key 热点、跨槽事务、复制滞后仍在
「Sentinel 与 Cluster 可叠加强用」 生产通常二选一拓扑,避免双重复杂度
「Valkey 与 Redis 永远 100% 兼容」 跟踪各自 release note;合规与许可证独立
「模块等于微服务」 模块仍在单进程故障域内
「读完 16 篇就会运维百节点 Cluster」 本篇提供地图;大规模实践需官方工具链与演练

九、系列收束

本系列从 事件循环对象编码 出发,经 淘汰持久化,到 复制ClusterMemcached 对照排障,构成 Redis 7.4/8.x 内核层 的一条可读路径。更上层的 Cache-Aside 与多级缓存,请回到 architecture/17;更下层的磁盘嵌入 KV,请进入 RocksDB

三句话小结

  1. Standalone / Sentinel / Cluster 按写扩展、failover、slot 复杂度递增;纯 blob Cache-Aside 仍应认真考虑 Memcached。
  2. Valkey 是许可证驱动下的 OSS 分叉路线,技术上短期接近 Redis,合规与 roadmap 需独立跟踪;模块 扩展命令但不改变单进程故障域与主线程代价模型。
  3. 全系列 16 篇与 architecture/17、RocksDB、算法篇形成 应用—内存服务器—磁盘存储 三角;按本篇地图选下一条边即可。

参考资料

文档(A 级)

  1. Redis Documentation, High availabilityCluster tutorialSentinelModules API
  2. Redis OSS 7.4 redis.conf 与 release notes(IO threads、许可证变更前的 OSS 行为)。

辅助(B 级)

  1. Linux Foundation, Valkey project announcements(分叉动机与兼容声明)。
  2. Kleppmann, M., How to do distributed locking(与 Redlock 争论);Antirez 回应文(B 级博客)。
  3. 系列 indexPLAN.md(规划文档,非发布页)。

返回 系列目录 | 上一篇:生产排障缓存架构RocksDB

同主题继续阅读

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

2026-07-07 · database / storage

【RocksDB 内核机制】选型与存储栈阅读地图

用决策树收束 RocksDB 与 InnoDB、列存、湖仓的适用边界;给出存储引擎三角 + 数据平台全栈阅读地图,对接 query-engine/18 与 postgresql-kernel,并标注 HTAP/TiKV 续作入口。


By .