Redis数据库集群

Redis Cloud 使用集群来管理非常大的数据库(25 GB 及以上)。在这里,您将学习如何管理集群以及如何使用哈希策略来控制数据的管理方式。

对于非常大的数据库,Redis Cloud 将数据库数据分发到不同的云实例。例如:

  • 当数据增长超过单个服务器的RAM资源时。

    当数据增长到25 GB(自动分层为50 GB)时,应使用多个分片来创建多个分片。

  • 对数据库执行的操作足够CPU密集型,以至于会降低性能。

    集群分发操作负载,无论是在同一服务器上的实例还是跨多个服务器。

这种分布被称为聚类,因为它管理数据在支持数据库的节点集群中的分布方式。

数据是如何分布的

Redis Cloud集群是一组托管的Redis进程和云实例,每个进程管理数据库键空间的一个子集。集群利用多个核心和多个实例的资源来克服扩展挑战。

在Redis Cloud集群中,键空间被分割成哈希槽。在任何给定时间,一个哈希槽都位于并由单个Redis服务器管理。

属于集群的实例可以管理多个哈希槽。这种键空间的划分,称为分片,是通过对键名或这些键名的一部分(键哈希标签)进行哈希处理来实现的,以便获得键应驻留的哈希槽。

即使在使用多个Redis进程时,Redis Enterprise Cloud集群的使用对使用它的应用程序几乎是透明的。集群通过一个单一的端点访问,该端点自动将所有操作路由到相关的分片,而无需复杂的集群感知Redis客户端。这使得应用程序能够从使用集群中受益,而无需进行任何代码更改,即使它们最初并未设计为使用集群。

在Redis Cloud上创建或编辑Redis数据库时,系统会根据数据库内存限制和所需的吞吐量自动计算所需的分片数量。

多键操作

在分片的Redis云集群中对多个键的操作是支持的,但有如下限制:

  1. 多键命令: Redis 提供了多个接受多个键作为参数的命令。在分片设置中,只有当所有受影响的键都位于同一个槽(即同一个分片)时,才能运行多键命令。此限制适用于所有多键命令,包括 BITOP、BLPOP、BRPOP、BRPOPLPUSH、MSETNX、RPOPLPUSH、SDIFF、SDIFFSTORE、SINTER、SINTERSTORE、SMOVE、SORT、SUNION、XREAD、XREADGROUP、ZINTER、ZINTERSTORE、ZUNION、ZUNIONSTORE、ZDIFF、ZDIFFSTORE
  2. 地理命令: 在GEORADIUS/GEORADIUSBYMEMBER/GEOSEARCHSTORE命令中,STORE和STOREDIST选项只能在所有受影响的键位于同一槽时使用。
  3. 事务:在WATCH/MULTI/EXEC块内的所有操作应在同一槽中的键上执行。
  4. Lua脚本: 脚本使用的所有键必须位于同一个槽中,并且需要作为参数提供给EVAL/EVALSHA命令(根据Redis规范)。
  5. 重命名/复制键:只有当键的原始名称及其新名称都映射到相同的哈希槽时,才允许使用 RENAME/RENAMENX/COPY 命令。
  6. 可变参数命令:Redis Cloud 集群支持使用(MGET、MSET、HMGET、HMSET 等)和管道操作,就像它是一个非集群数据库一样。

管理哈希策略

Redis 默认使用 标准哈希策略。 Redis Cloud 实例的集群配置可以更改。 但是,哈希策略的更改会在应用之前删除现有数据 (FLUSHDB)。

这些变化包括:

  1. 更改哈希策略,无论是从标准更改为自定义,还是反之亦然。
  2. 更改自定义哈希策略规则的顺序。
  3. 在自定义哈希策略中的现有规则之前添加规则。
  4. 从自定义哈希策略中删除规则。
  5. 禁用数据库的集群功能。

标准哈希策略

使用标准哈希策略时,Redis Cloud 集群的行为类似于标准 Redis 集群,哈希操作如下进行:

  1. 带有哈希标签的键:键的哈希标签是键名中'{'和'}'之间的任何子字符串。这意味着当键名包含模式'{...}'时,哈希标签被用作哈希函数的输入。例如,以下键名具有相同的哈希标签并被映射到同一个槽:foo{bar}、{bar}baz & foo{bar}baz。
  2. 没有标签的键:当键不包含'{...}'模式时,整个键的名称用于哈希。

您可以使用'{...}'模式将相关键定向到同一个哈希槽,从而支持对它们进行多键操作。另一方面,不在键名中使用哈希标签会导致键在键空间的分片中(统计上)均匀分布,从而提高资源利用率。如果您的应用程序不执行多键操作,则不需要使用哈希标签构造键名。

自定义哈希策略

可以配置Redis Cloud集群以使用自定义哈希策略。当需要将不同的键保持在同一分片上以允许多键操作时,需要自定义哈希策略。Redis Cloud的自定义哈希策略通过一组Perl兼容的正则表达式(PCRE)规则提供,这些规则描述了数据集的键名模式。

要配置自定义哈希策略,请输入正则表达式(RegEx)规则,这些规则用于识别键名中的子字符串 - 哈希标签 - 哈希将在此标签上进行。哈希标签在正则表达式中通过使用名为`tag`的命名子模式来表示。具有相同哈希标签的不同键将被存储和管理在同一个槽中。

一旦启用自定义哈希策略,Redis Cloud 的默认正则表达式规则将实现标准哈希策略:

正则表达式规则 描述
.*{(?<tag>.*)}.* 哈希是在大括号之间的子字符串上进行的。
(?<tag>.*) 整个键的名称用于哈希。

您可以修改现有规则、添加新规则、删除规则或更改它们的顺序,以适应您的应用程序需求。

自定义哈希策略注意事项和限制

  1. 您可以定义最多32个正则表达式规则,每个规则最多256个字符。
  2. 正则表达式规则按其顺序进行评估。
  3. 匹配的第一条规则将被使用;努力将常见的键名模式放在规则列表的开头。
  4. 不匹配任何正则表达式规则的键名会触发错误。
  5. '.*(?)' 正则表达式规则强制将键放入单个槽中,因为哈希键始终为空。使用时,这应该是最后的全能规则。
  6. The following flag is enabled in our regular expression parser:
    • PCRE_ANCHORED: 该模式被限制为仅在被搜索字符串的开头匹配。

数据集大小

数据库的数据集大小是数据库完整内存限制的一部分。内存限制表示数据库的最大内存量,包括数据值、键、模块数据以及特定功能的开销。高可用性功能,如复制和Active-Active,会增加内存消耗,因此在这些情况下,您的数据集大小和内存限制会有所不同。

对于Redis Cloud Essentials,计划大小指的是完整的内存限制,而不是数据集大小。当您创建Essentials数据库时,总内存限制和数据集大小都列在数据库详细信息下。

对于Redis Cloud Pro,您在创建数据库时定义数据集大小,我们根据您选择的特性计算您的总内存限制。

以下是一些通用指南:

  • 内存限制代表一个上限。您不能存储超过内存限制的数据。根据您的其他选择,可用于数据的内存可能少于预期。

  • Replication 会加倍内存消耗;也就是说,当启用复制时,512 MB 的数据至少需要 1 GB 的内存限制。这会影响 Redis Cloud Pro 和 Redis Cloud Essentials。例如,如果您订阅了 1 GB 的 Essentials 计划,Redis 将为您的数据集分配 512 MB,另外 512 MB 用于复制。

  • Active-Active 还会使内存消耗翻倍,并且这种影响与复制的影响是累积的。由于 Active-Active 需要开启复制,内存限制的影响可能高达原始数据大小的四倍(4x)。

  • 高级功能也会消耗内存。对于搜索数据库,在确定数据库大小时,请考虑索引大小。

Redis Cloud 中的内存限制与 Redis Enterprise Software 的考虑因素相同;要了解更多信息,请参阅 Database memory limits

吞吐量

吞吐量是数据库在一定时间内可以处理的操作数量。对于Redis Cloud数据库,吞吐量以每秒操作数(ops/sec)定义。

对于Redis Cloud Pro订阅,您在创建数据库时定义其吞吐量。对于Redis Cloud Essentials订阅,您的最大吞吐量取决于您的计划。

我们假设一个典型的工作负载,包括不同的命令组合和平均键值大小为1KB。因此,您的实际吞吐量可能高于或低于您在创建数据库时设置的吞吐量。以下属性可能会影响您的数据库吞吐量:

  • 命令复杂度: O(N) 和 O(log(N)) 命令将比 O(1) 命令花费更多时间,并相应地影响吞吐量。
  • 键和值的大小:如果您的数据库的键和值非常大,您的实际吞吐量可能低于预期。如果键和值小于典型工作负载,实际吞吐量可能高于预期。
  • 复制: 使用多区域复制会影响吞吐量,因为每个写操作在每个区域都是异步执行的。
  • 安全性: 一些安全选项,例如传输层安全,可能会影响吞吐量。
  • 客户端连接数: 客户端连接数会影响吞吐量。增加或减少客户端连接数可能会导致吞吐量增加或减少。

集群API

OSS集群API通过接近线性的可扩展性减少了访问时间和延迟。 OSS集群API为Redis客户端提供了一种简单的机制来了解集群拓扑。

客户端必须首先连接到主节点以获取集群拓扑,然后它们直接连接到每个承载主分片的节点上的Redis代理。

注意:
您必须使用支持集群API的客户端来连接到启用了集群API的数据库。

Cluster API 仅在 Redis Cloud Pro 数据库上受支持。您可以在配置屏幕的“可扩展性”部分启用它。

Redis Cluster API 仅在数据库使用标准哈希策略且不使用搜索和查询或时间序列高级功能时受支持。

查看Redis Cluster API架构以确定是否应为您的数据库启用此功能。

RATE THIS PAGE
Back to top ↑