如何为高级 Azure Redis 缓存配置 Redis 群集功能

Azure Redis 缓存具有不同的缓存产品(包括群集、持久性和虚拟网络支持等高级层功能),使缓存大小和功能的选择更加灵活。 本文介绍如何配置高级 Azure Redis 缓存实例中的群集功能。

有关其他高级缓存功能的信息,请参阅 Azure Redis 缓存高级层简介

什么是 Redis 群集?

Azure Redis 缓存提供的 Redis 群集与 在 Redis 中实施的一样。 Redis 群集具有以下优势:

  • 能够在多个节点中自动拆分数据集。
  • 能够在部分节点遇到故障或无法与群集其余部分通信的情况下继续运行。
  • 更大的吞吐量:增加分片数时,吞吐量呈线性增加。
  • 更大的内存大小:增加分片数时,内存大小呈线性增加。

群集不会增加可用于群集缓存的连接数。 若要深入了解高级缓存的大小、吞吐量和带宽,请参阅应使用哪种类型和大小的 Redis 缓存产品/服务?

在 Azure 中,Redis 群集以主/副模型提供。在该模型中,每个分片都有一个带副本的主/副对,副本由 Azure Redis 缓存服务管理。

群集功能

在创建缓存期间,在“新建 Redis 缓存”边栏选项卡上启用群集功能。

若要创建高级缓存,请登录到 Azure 门户,然后单击“新建” > “数据库” > “Redis 缓存”。

Note

除了在 Azure 门户中创建缓存以外,也可以使用 Resource Manager 模板、PowerShell 或 Azure CLI 创建。 有关创建 Azure Redis 缓存的详细信息,请参阅创建缓存

若要配置高级功能,请先在“定价层”下拉列表中选择一个高级定价层。 若要详细了解每个定价层,请单击“查看全部定价详细信息”,并从“选择你的定价层”边栏选项卡中选择一个定价层。

选择定价层

在“Redis 群集”边栏选项卡上配置群集功能。

群集功能

群集中最多可以有 10 个分片。 单击“启用”,滑动滑块或者针对“分片计数”键入一个 1 到 10 之间的数字,并单击“确定”。

每个分片都是一个由 Azure 管理的主/副缓存对,而缓存的总大小则通过将定价层中选择的缓存大小乘以分片数来计算。

群集功能

创建缓存后,即可连接到该缓存,并像非群集缓存一样使用,Redis 会将数据分发到整个缓存分片中。 如果诊断已启用,则会为每个分片单独捕获指标,这些指标可在 Redis 缓存边栏选项卡中查看

Note

配置群集时,客户端应用程序中需要有一些细微的差别。 有关详细信息,请参阅使用群集功能时,是否需要对客户端应用程序进行更改?

有关在 StackExchange.Redis 客户端中使用群集功能的示例代码,请参阅 Hello World 示例的 clustering.cs 部分。

更改正在运行的高级缓存上的群集大小

若要更改正在运行并且已启用群集功能的高级缓存上的群集大小,请在“资源菜单”中单击“Redis 群集大小”。

Note

虽然 Azure Redis 缓存高级层已发布正式版,但 Redis 群集大小功能目前以预览版提供。

Redis 群集大小

要更改群集大小,请使用滑块,或在“分片计数”文本框中键入 1 到 10 之间的数字,并单击“确定”进行保存。

增加群集大小会增加最大吞吐量和缓存大小。 增加群集大小不会增加用于客户端的最大连接数据。

Note

缩放群集会运行 MIGRATE 命令,此命令需耗费大量资源,因此为使其影响最小,请考虑在非高峰时段运行此操作。 在迁移过程中,服务器负载将达到峰值。 缩放群集的运行过程耗时较长,所花费的时间量取决于密钥数以及与这些密钥相关联的值的大小。

群集功能常见问题

以下列表包含有关 Azure Redis 缓存群集功能常见问题的解答。

使用群集功能时,是否需要对客户端应用程序进行更改?

密钥在群集中是如何分布的?

请参阅 Redis 密钥分布模型 文档:密钥空间拆分成 16384 个槽。 每个密钥都经过哈希处理并分配到其中一个槽,这些槽分布在群集的节点中。 对密钥的哪部分进行哈希处理是可以配置的,这样可确保多个使用哈希标记的密钥位于同一分片。

  • 使用哈希标记的密钥 - 如果将密钥的任意部分括在 {} 中,则只会对密钥的该部分进行哈希处理,以便确定密钥的哈希槽。 例如,以下 3 个密钥将位于同一分片中:{key}1{key}2{key}3,因为只对名称的 key 部分进行了哈希处理。 如需密钥哈希标记规范的完整列表,请参阅 密钥哈希标记
  • 没有哈希标记的密钥 - 使用整个密钥名称进行哈希处理。 从统计学意义上来说,这样会导致密钥平均分布到缓存的各个分片中。

为了优化性能和吞吐量,建议将密钥平均分布。 如果使用带哈希标记的密钥,则应用程序会负责确保密钥平均分布。

有关详细信息,请参阅 Keys distribution mode(密钥分布模型)、Redis Cluster data sharding(Redis 群集数据分片)和 Keys hash tags(密钥哈希标记)。

有关在 StackExchange.Redis 客户端中使用群集和查找同一分片中的密钥的示例代码,请参阅 Hello World 示例的 clustering.cs 部分。

可以创建的最大缓存大小是多大?

高级缓存的最大大小为 53 GB。 可以创建多达 10 个分片,因此最大大小为 530 GB。 如果需要的大小更大,则可请求更多。 有关详细信息,请参阅 Azure Redis 缓存定价

是否所有 Redis 客户端都支持群集功能?

目前,并非所有客户端都支持 Redis 群集功能。 StackExchange.Redis 是不支持该功能的客户端。 有关其他客户端的详细信息,请参阅 Redis cluster tutorial(Redis 群集教程)的 Playing with the cluster(操作群集)部分。

Note

如果使用 StackExchange.Redis 作为客户端,请确保使用最新版本的 StackExchange.Redis,即 1.0.481 或更高版本,以便群集功能能够正常使用。 如果对 move 异常有任何疑问,请参阅 move 异常了解详细信息。

启用群集功能后,如何连接到缓存?

连接到缓存时,可以使用的终结点端口密钥与连接到未启用群集功能的缓存时使用的相同。 Redis 在后端管理群集功能,因此不需要你通过客户端来管理它。

可以直接连接到缓存的各个分片吗?

尚未正式提供此方面的支持。 话虽如此,但每个分片都是由主/副缓存对组成的,该缓存对统称为缓存实例。 可以在 GitHub 上通过 Redis 存储库的 不稳定 分支使用 redis-cli 实用程序连接到这些缓存实例。 使用 -c 开关启动后,此版本可实现基本的支持。 有关详细信息,请参阅 http://redis.ioRedis cluster tutorial(Redis 群集教程)中的操作群集

对于非 ssl,请使用以下命令。

Redis-cli.exe -h <<cachename>> -p 13000 (to connect to instance 0)
Redis-cli.exe -h <<cachename>> -p 13001 (to connect to instance 1)
Redis-cli.exe -h <<cachename>> -p 13002 (to connect to instance 2)
...
Redis-cli.exe -h <<cachename>> -p 1300N (to connect to instance N)

对于 ssl,请将 1300N 替换为 1500N

可以为以前创建的缓存配置群集功能吗?

目前,只能在创建缓存时启用群集。 创建缓存后,可以更改群集大小,但不能将群集添加到高级缓存,或者从高级缓存中删除群集。 已启用群集且只包含一个分片的高级缓存不同于具有相同大小且没有群集的高级缓存。

可以为基本缓存或标准缓存配置群集功能吗?

群集功能仅适用于高级缓存。

能否在 Redis ASP.NET 会话状态和输出缓存提供程序中使用群集功能?

  • Redis 输出缓存提供程序 - 无需进行更改。
  • Redis 会话状态提供程序 - 若要使用群集功能,必须使用 RedisSessionStateProvider 2.0.1 或更高版本,否则会引发异常。 这是一项重大更改;有关详细信息,请参阅 2.0.0 版重大更改详细信息

在使用 StackExchange.Redis 和群集功能时出现 MOVE 异常,应该怎么办?

如果使用的是 StackExchange.Redis 并在使用群集功能时收到 MOVE 异常,请确保使用的是 StackExchange.Redis 1.1.603 或更高版本。 有关如何配置 .NET 应用程序以使用 StackExchange.Redis 的说明,请参阅配置缓存客户端

后续步骤

了解如何使用更多的高级缓存功能。