冷热分离 · Redis 企业版的存储经济学

作者:杨帅      发布日期:2026.05.28

DATASTORE
关于存储、缓存与一切介于两者之间的事物

×
数据的温度

内存很快,但它很贵。磁盘很慢,但它很便宜。在两者之间,Redis 企业版铺设了一条精巧的通道 —— 让数据按使用频率自动流动,在性能与成本之间找到那个被低估的平衡点。

§ 01 — 问题

内存成为账单上最显眼的那行数字

Redis 起家的故事很简单:把一切放进内存,换取微秒级响应。多年来,这个简单的承诺塑造了无数高并发应用 —— 直到数据集的体量开始膨胀。

当某个电商团队发现他们的 Redis 集群已经达到 3TB,而其中超过 70% 的键在过去 24 小时内从未被访问过 —— 他们才意识到一件事:用 DRAM 的价格,存放了大量本不需要 DRAM 速度的数据

问题不在于 Redis 本身,而在于一个被忽视的假设:并非所有数据都同样"热"。一个用户的登录会话、一个商品的实时库存、一个排行榜的当前快照 —— 它们配得上 DRAM。但用户三年前的购物记录、过期的会话日志、归档的事件流呢?

▾ 单位存储成本对比 (相对值)
DRAM
1.00×
NVMe SSD
0.20×
HDD
0.04×
注:数值为行业典型估算,实际比例因供应商与规模而异。
关键不在于精确数字,而在于数量级差异
所有数据生而平等,
但有些数据比另一些更平等
§ 02 — 架构

Auto Tiering:让数据自己找到该去的地方

Redis 企业版的 Auto Tiering(早期称为 Redis on Flash, RoF)将单一存储介质拆分成多个温度层。键的元数据和热数据驻留在 DRAM,值的主体可以下沉到 SSD/NVMe。整个过程对应用透明 —— 你的代码仍然只在和 Redis 对话。

▾ 分层存储拓扑结构 / Tiered Storage Topology ▾
HOT · 热层
DRAM内存层
所有键的元数据 · 高频访问值 · 索引结构 · 最近写入的数据
延迟 < 1ms
占比 ~ 20%
介质 RAM
↓   LRU/LFU 驱动的自动下沉   ↓
WARM · 温层
SSD / NVMe闪存层
较少访问的值主体 · 通过 RocksDB 引擎管理 · 仍可亚毫秒级读取
延迟 1 – 5ms
占比 ~ 80%
介质 NVMe
↓   可选 · 归档至对象存储   ↓
COLD · 冷层
对象存储 / 备份归档层
S3 兼容存储 · 定期 RDB 快照 · 用于灾难恢复与合规归档
延迟 秒级
占比 无限
介质 S3 / HDD
§ 03 — 机制

工作原理,三步看完

01
键元数据始终在内存

无论值存储在哪一层,所有键的元数据(key、过期时间、类型、指向值的指针)都常驻 DRAM。这保证了 GET / EXISTS / TTL 等操作的 O(1) 性能 —— 你不会因为某个值在 SSD 上而支付任何"查找"代价。

02
值按访问温度自动迁移

后台进程持续追踪每个值的访问频率与时间。冷数据被序列化、压缩,写入 SSD 上由 RocksDB 管理的 LSM 树。当冷值被访问时,它会被提升回 DRAM —— 整个过程对客户端完全透明。

03
通过策略掌控比例

管理员可配置 RAM 与 Flash 的目标比例(如 20:80),设置阈值与回写策略。Redis 企业版会在后台不断调整,确保热数据保持在内存中,而冷数据安静地住在 SSD 里。

§ 04 — 实践

配置 Auto Tiering,从一行命令开始

创建分层存储数据库

通过 rladmin CLI 创建启用 Auto Tiering 的数据库,指定 DRAM 与 Flash 的目标比例。

# 通过 rladmin 创建分层数据库 # RAM:Flash = 20:80, 总容量 100GB $ rladmin tune db cache-prod \ bigstore_ram_weights 20 \ bigstore_flash_weights 80 # 验证当前配置 $ rladmin info db cache-prod memory_size: 20 GB bigstore_size: 80 GB bigstore_enabled: true

应用代码无需任何变化

对客户端而言,分层存储完全透明。同样的命令,同样的 API,只是底层多了一个智能调度层。

# 应用代码 - 没有任何特殊处理 import redis r = redis.Redis(host='enterprise-cluster') # 写入 - Redis 决定它的归属 r.set('user:42:profile', profile_data) # 读取 - 如果在 Flash 上,自动取回 data = r.get('user:42:profile') # 你不需要知道它在哪一层 # 你只需要知道:它就在那儿
⚠ 设计注解 所有命令仅供参考,实际语法以 Redis Enterprise 当前文档为准。生产环境部署前,建议在测试集群验证 RAM:Flash 比例对你的工作负载的影响。
§ 05 — 场景

谁应该认真考虑这件事?

i.
用户画像与会话USER PROFILES
活跃用户的画像数据需要快速访问,但绝大多数用户每天只登录一次。让活跃用户驻留 DRAM,休眠用户下沉 Flash —— 既保留访问体验,又大幅压缩内存账单。
−65%典型 RAM 占用
ii.
特征存储与 ML 推理FEATURE STORE
特征向量数量庞大,但 80/20 法则普遍适用 —— 推理请求集中在少量热点用户/物品上。冷热分离让 TB 级特征库能用合理预算运行。
容量上限提升
iii.
实时排行榜与计数LEADERBOARDS
热门榜单(Top 100)频繁刷新,而完整长尾(百万条目)极少被读取。让头部留在 DRAM,长尾沉淀 Flash —— Top N 操作几乎不受影响。
~ ms头部操作延迟
iv.
事件流与时序数据EVENT STREAM
最近事件需要即时查询,历史事件多用于审计与回溯。Redis Streams 配合 Auto Tiering,既支持实时消费,也支持长期保留。
30×保留时长延伸
v.
大型缓存层CACHE TIER
作为数据库前的缓存层,需要尽可能高的命中率。更大的总容量 = 更高的命中率。Auto Tiering 让你用 1/3 的成本承载 3× 的数据集。
+ 22%命中率改善

数据来源:行业典型案例区间,具体收益依工作负载、访问模式、硬件配置而异。

§ 06 — 取舍

没有免费的午餐,但有划算的那种

Auto Tiering 不是银弹。在拥抱它之前,值得诚实地审视它给你带来什么、又夺走什么。

▾ 收益 / Pros
  • 显著的 TCO 降低同样的数据集,基础设施成本通常能降到原来的 30–50%。规模越大,绝对收益越明显。
  • 更大的有效容量单节点能承载的数据量从受 RAM 容量限制,变为受 SSD 容量限制 —— 通常意味着 5–10× 的提升。
  • 对应用透明不需要重写代码,不需要引入新的客户端 SDK,不需要修改数据模型。你的应用甚至不知道分层在发生。
  • 保留 Redis 的全部能力所有数据结构、所有命令、所有模块都继续工作 —— 包括 RedisJSON、RediSearch 等。
▾ 代价 / Cons
  • 冷数据访问延迟上升当请求命中 Flash 上的值时,延迟会从微秒级升至毫秒级。需要评估你的 P99 容忍度。
  • 对访问模式敏感如果工作负载没有明显的热点(均匀随机访问),分层带来的收益会大幅缩水甚至变成负担。
  • 硬件要求更严需要高质量的 NVMe SSD,IOPS 与耐久性都很关键。普通 SATA SSD 通常无法胜任。
  • 仅企业版可用开源 Redis 没有这个特性。预算决策需要权衡软件许可成本与硬件节省之间的关系。
§ 07 — 收尾

花在该花的地方

冷热分离不是关于"让 Redis 变得更便宜",而是关于让数据的存储位置匹配它的真实价值

一个用户上次访问是五分钟前还是五个月前,这是有信息的。一个商品是首页推荐还是搜索深处的长尾,这也是有信息的。Redis 企业版的 Auto Tiering 做的事,就是把这些信息变成存储介质的选择 —— 自动地、持续地、对应用透明地。

如果你的 Redis 集群正在增长,如果你的内存账单正在攀升,如果你怀疑你的数据里藏着大量"占着 DRAM 不干活"的冷键 —— 那么这条通向 SSD 的路,值得你认真走一遍。