了解差异 - 基本层、标准层和高级层与 Azure 托管 Redis

在迁移之前,请查看 Azure Cache for Redis 与 Azure 托管 Redis 之间的主要差异,以便可以有效地规划。

重要

Azure Cache for Redis(基本层、标准层和高级层)的迁移代理技能可用于帮助回答与迁移相关的问题,并准备针对环境定制的迁移计划。 有关详细信息,请参阅 Redis 迁移代理技能

为什么 Azure 托管 Redis 的性能更高

Azure托管 Redis 构建在 Redis Enterprise 软件堆栈上,它为基本层、标准和高级层使用的开源 Redis 提供显著的性能改进。 Redis Enterprise 使用多线程体系结构,可以每秒处理更多操作,提供较低的延迟,并更有效地使用基础硬件。 这意味着,对于相同的内存和计算量,与等效的基本层、标准层缓存或高级层缓存相比,Azure托管 Redis 可以大幅提高吞吐量。

此外,Azure托管 Redis 通过 Redis 模块(如 RediSearch、RedisJSON 和 RedisBloom)支持高级数据结构,这些模块在基本层、标准层或高级层中不可用。 若要了解有关体系结构的详细信息,请参阅 Azure 托管 Redis 体系结构

关键特性/功能差异

下面是从基本、标准或高级迁移到 Azure 托管 Redis 时要注意的重要差异:

  • SKU 结构。 Azure 托管 Redis 以不同于 Azure Cache for Redis 的方式组织 SKU。 Azure托管 Redis SKU 不采用基于层的 SKU(基本、标准、高级),而是基于两个维度:内存大小性能层(均衡、内存优化或计算优化)。 所有高可用性和灾难恢复(HADR)功能(包括区域冗余、数据持久性、异地复制和导入/导出)均适用于所有大小和性能层。 不再需要选择更高级别的 SKU 即可访问这些功能。

  • 高可用性与非高可用性。 Azure 托管 Redis 提供高可用性或非高可用性情况下的部署选项。 非 HA 选项专为想要降低成本的非生产工作负荷和开发/测试工作负荷而设计。 非 HA 实例不携带 SLA,并有可能在维护期间丢失数据。 相比之下,基本层、标准层和高级层不提供这种灵活性 - 基本层没有 HA,而标准层和高级层始终包含它。

  • 聚 类。 默认情况下,Azure托管 Redis 群集化,并提供两个群集策略 - OSS 群集和企业群集。 建议选择 OSS 群集以获得最佳性能。 如果当前使用的是非聚集基本缓存或标准缓存,则 Redis 客户端库配置可能需要更改才能使用群集实例(例如,使用群集感知客户端库处理 MOVED 重定向)。 如果应用程序绝对需要非聚集实例,Azure托管 Redis 为缓存提供高达 25 GB 的非聚集模式。

  • 网络隔离。 Azure托管 Redis 不支持虚拟网络注入和配置基于 IP 的防火墙规则。 如果现有Azure Cache for Redis实例使用虚拟网络注入进行网络隔离,则需要切换到将Azure 专用链接与新的Azure托管 Redis 实例配合使用。

  • 缩放。 Azure托管 Redis 支持更改内存大小和性能层。

  • Microsoft Entra ID。 这两个服务都支持Microsoft Entra ID身份验证。 但是,Azure托管 Redis 目前不支持 Microsoft Entra ID RBAC。

  • 计划更新。 Azure Cache for Redis支持配置 Redis 引擎更新的计划更新窗口。 Azure托管 Redis 支持当前处于预览状态的计划更新。

  • TLS 和非 TLS 端口支持。 在Azure Cache for Redis基本层、标准层和高级层中,同一缓存实例可以同时支持 TLS(端口 6380)和纯文本(端口 6379)连接,从而允许不同的应用程序使用任一模式进行连接。 在Azure托管 Redis 中,缓存一次仅支持一种模式,即 TLS 或非 TLS。 在创建缓存期间选择模式后,连接到该缓存的所有应用程序都必须使用相同的模式。

  • 区域冗余。 启用高可用性且区域支持多个可用区时,Azure 托管 Redis 默认是区域冗余的。 相比之下,区域冗余仅在高级层(以及标准版预览版)中可用。

  • 数据库。 基本层、标准层和高级层支持多个 Redis 数据库(默认情况下最多 16 个,可在高级版上配置最多 64 个)。 Azure托管 Redis 仅支持单一数据库(数据库 0)。 如果应用程序使用多个数据库,则需要重构数据模型以使用单一数据库或使用密钥前缀在迁移之前以逻辑方式分隔数据。

  • 异地复制。 Azure托管 Redis 支持活动异地复制,允许在不同区域中跨链接缓存执行读取和写入操作。 高级层仅支持被动异地复制,其中辅助缓存为只读。 与 Azure Cache for Redis 不同,Azure 管理的 Redis 不支持显式的故障转移命令。 相反,当应用程序检测到其中一个区域不可用时,需要切换到不同的地理复制的 Azure 托管 Redis 实例。

  • 数据持久性。 Azure托管 Redis 支持跨所有 SKU 的数据持久性。 在Azure Cache for Redis中,持久性仅在高级层中可用。

  • Redis 模块。 Azure托管 Redis 支持 Redis 模块,例如 RediSearch、RedisJSON、RedisBloom 和 RedisTimeSeries。 这些模块在基本层、标准层或高级层中不可用。

  • 导入/导出。 Azure 托管 Redis 支持在所有 SKU 上进行 RDB 的导入和导出。 在Azure Cache for Redis中,此功能仅在高级层中可用。

  • 密钥空间通知。 Azure Cache for Redis 支持键空间通知,但目前在 Azure 管理的 Redis 中不可用。

  • 重新启动。 Azure Cache for Redis支持手动重启缓存节点。 此操作在自动管理节点操作的 Azure Managed Redis 中不可用。 如果使用“重新启动”刷新缓存中的数据,则Azure托管 Redis 提供 Flush 作为管理操作。 Azure托管Redis API将在计划中用于模拟维护事件,以测试应用程序的复原能力。

客户端应用程序的主要差异

规划应用程序更新时,请查看以下差异:

功能说明 Azure Cache for Redis Azure 托管的 Redis
DNS 后缀(适用于Azure公有云) .redis.cache.windows.net <region>.redis.azure.net
TLS 端口 6380 10000
非 TLS 端口 6379 10000
单个节点 TLS 端口 13XXX 85xx
单个节点非 TLS 端口 15XXX 85xx
群集支持 仅 OSS 集群 OSS 和企业群集
非群集/独立 是(基本,标准,高级高达 120GB) 是(非聚集模式,仅限 25 GB)
Redis 版本 6 7.4
支持的 TLS 版本 1.2 和 1.3 1.2 和 1.3

选择正确的 Azure 托管 Redis 大小和 SKU

重要

Azure 托管 Redis 保留大约 20% 内存,用于系统操作和开销。 在为新实例选择合适的内存容量时,请考虑预留的内存。 例如,如果工作负荷需要 10 GB 的可用内存,请选择至少 12.5 GB 总内存的 SKU。

选择正确的Azure托管 Redis SKU 涉及两个步骤:选择正确的 memory size,然后选择正确的 性能层

步骤 A:选择正确的内存大小

  1. 确定当前缓存的内存大小。 转到 Azure 门户,打开“基本”、“标准”或“高级”缓存,并在 概述 页上记下内存大小(例如,C3 = 13 GB,P2 = 13 GB)。 对于高级群集缓存,请选择在所有分片中具有等效总内存的大小。

  2. 在 Azure 托管 Redis 中查找类似的大小 SKU。 查找提供相同或更大可用内存的 Azure 托管 Redis SKU。 请注意,比较大小的时候,Azure 管理的 Redis 系统保留大约 20% 的内存,用于系统操作和开销。 在选择大小时考虑此预留 ,例如,B10/M10/X10 SKU 提供 12 GB 的总内存,但在预留后为数据提供大约 9.6 GB 的可用内存。

  3. 根据实际内存使用情况进行优化。 查看Azure Monitor中现有缓存的使用内存指标,而不是匹配名义缓存大小。 检查过去一个月的峰值内存使用率,以确定更合适的 SKU。 如果实际内存使用率远远低于缓存大小,则可以选择更小、更具成本效益Azure托管 Redis SKU。

步骤 B:选择正确的性能层

Azure托管 Redis 提供三个性能层:BalancedMemory OptimizedCompute Optimized。 根据工作负荷特征进行选择:

  • 平衡 - 如果你不确定,这是一个很好的起点。 提供合理的内存与计算能力组合。
  • 内存优化 - 如果工作负荷占用大量内存,并且更有可能在 CPU 之前耗尽内存,请选择此选项。
  • 计算优化 - 如果工作负荷是吞吐量密集型或延迟敏感型,请选择此选项。

有关详细信息,请参阅 选择正确的层

其他注意事项

  • 禁用基本层迁移的高可用性。 如果要从基本缓存(没有复制或 SLA)迁移,请在新的 Azure 托管 Redis 实例上禁用高可用性。 这可减半成本,并为开发/测试工作负荷提供类似的设置。

后续步骤