闪存优化层的最佳做法

Azure托管 Redis 中的闪存优化层通过自动将不太频繁访问的数据从内存(RAM)移动到快速 NVMe 闪存存储,从而为非常大的数据集实现经济高效的缩放。 热数据保留在 RAM 中,以实现低延迟访问;而冷数据则存放在 NVMe 中,并在被访问时传输到 RAM,其每 GB 成本低于纯内存层。

Flash Optimized 的工作原理

Azure托管 Redis Flash Optimized 使用分层存储方法:

  • 热数据 - 经常访问的密钥和值保留在 DRAM 中,延迟为子毫秒。
  • 冷数据 - 访问频率较低的数据会自动移动到主机 VM 上的本地 NVMe 存储,并在访问时传输回 RAM。
  • 客户端托管 - 分层完全由系统管理。 客户端使用标准 Redis 命令与缓存交互,而不知道数据的物理驻留位置。

与内存中部署相比,此体系结构允许以明显更低的成本维护 TB 范围内的缓存。

Note

通过 Flash Optimized 将数据存储在 NVMe 上不会 增加数据复原能力。 对于持久性,除了闪存存储之外,还配置 数据持久性 (RDB 或 AOF)。

何时使用 Flash Optimized

Flash Optimized 非常适合以下情况:

  • 数据集非常大(数百 GB 到多个 TB)。
  • 相当一部分数据很少被访问(“冷数据”)。
  • 你需要面向热数据的 Redis 语义和性能,但又希望避免将所有数据都保存在 DRAM 中所带来的成本。
  • 你的工作负载相较于内存层,能够容忍冷数据读取略高的延迟。

常见用例包括:

  • 分析和报告 - 大型查找表、聚合数据集
  • 社交和游戏 - 用户配置文件、会话历史记录、带有长尾的排行榜

SKU 规格

SKU 大小(GB) 地位
A250 235 GA
A500 480 GA
A700 720 GA
A1000 960 GA
A1500 1,440 GA
A2000 1,920 公共预览版
A4500 4,500 公共预览版

有关每个 SKU 的连接限制,请参阅 最大客户端连接数。 有关定价详细信息,请参阅 Azure 托管 Redis 定价

功能支持

下表汇总了 Flash 优化层上的功能可用性:

特性 支持
SLA 是的
传输中的数据加密(专用终结点) 是的
复制和故障转移 是的
网络隔离(专用链接) 是的
Microsoft Entra ID 身份验证 是的
Scaling 是的
高可用性(区域冗余) 是的
数据持久性 (RDB/AOF) 是的
连接审核日志(基于事件) 是的
RedisJSON 是的
导入/导出 是的
主动异地复制
非群集实例
RediSearch /矢量搜索
RedisBloom
RedisTimeSeries

Important

RedisJSON 是 Flash Optimized 层上唯一支持的模块。 不支持活动异地复制、非聚集模式、RediSearch/矢量搜索、RedisBloom 和 RedisTimeSeries。

有关跨所有Azure托管 Redis 层的功能的完整比较,请参阅 什么是Azure托管 Redis?

最佳做法

如何使用闪存存储

在闪存优化实例上,20% 的缓存空间位于 RAM 上,其他 80% 则使用 Flash 存储。 所有密钥都存储在 RAM 中,而值可以存储在闪存存储或 RAM 中。 Redis 软件智能地确定值的位置。 经常访问的热值存储在 RAM 中,而不太常用的冷值保存在 Flash 上。 在读取或写入数据之前,必须将其移动到 RAM,成为热数据。

由于 Redis 将进行优化以实现最佳性能,因此在向 Flash 存储添加项之前,该实例将首先填满可用的 RAM。 先填充 RAM 会对性能产生一些影响:

  • 在按低内存使用率进行测试时,可能会出现更好的性能和较低的延迟。 使用完整缓存实例进行测试可能会降低性能,因为在低内存使用率测试阶段仅使用 RAM。
  • 向缓存写入更多数据时,与 Flash 存储相比,RAM 中的数据比例会降低,这通常也会降低延迟和吞吐量性能。

非常适合 Flash 优化的工作负载

在闪存优化层上可能运行良好的工作负载通常具有以下特征:

  • 读取密集型,其读取命令与写入命令的比率较高。
  • 访问侧重于使用频率远高于数据集其余键的一部分键。
  • 与键名称相比,值相对较大。 (由于键名始终存储在 RAM 中,因此较大的值可能会成为内存增长的瓶颈。)

不太适合闪存优化的工作负载

某些工作负载的访问特征针对 Flash 层设计进行的优化较少:

  • 写入密集型工作负载。
  • 大多数数据集中的随机或统一数据访问模式。
  • 键名称较长,但值的大小相对较小。

优化热/冷数据比率

访问模式越可预测,优化闪存性能越好:

  • 访问频率稳定的键可从稳定的分层中受益。
  • 整个数据集中具有极其随机访问模式的工作负荷将导致延迟下降
  • 使用 INFO 和监控来了解您的命中率和淘汰行为。

使用数据持久性实现持久性

闪存存储用于性能分层, 不适用于数据保护。 配置 RDB 快照或 AOF 持久化,以防止因中断导致的数据丢失。 Flash Optimized 支持这两个持久性选项。

网络和安全性

  • 专用终结点 - 始终使用 专用链接,使流量保留在你的 Azure 虚拟网络内。
  • Microsoft Entra ID - 尽可能使用无密码身份验证来提高安全状况。
  • 客户管理密钥(CMK) - 使用 Azure 密钥保管库 配置静态加密,以满足合规要求。

客户端配置

  • 有关客户端超时和连接复原指南,请参阅 连接复原最佳做法
  • 使用管道传送来最大化吞吐量。
  • 首选许多小键而不是几个大型键。
  • 监视连接、延迟百分位数(尤其是 p99)和 CPU。

常见问题和故障排除

尽管仍有可用的闪存容量,大值仍会导致 OOM

具有大值的键可能会导致 Flash 缓存出现问题。 最佳做法是将值大小保持在 512KB 以下。

所有密钥名称始终存储在 RAM 中。 过大的值会被固定在 RAM 中,无法卸载到 Flash,这可能会导致内存不足(OOM)错误,即使 Flash 存储仍有可用容量。

缓解:将大值分解为较小的键,使用压缩或分块策略。

小数据值与闪存效率

非常小的值(如果值大小接近或小于键名称大小)也会在 Flash 上表现不佳,因为没有足够的数据卸载。 当值的大小大于键名的大小,但又不能过大时,RoF 的效果最佳。