集群 Redis 数据库

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

Redis 云

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

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

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

  • 对数据库执行的作占用大量 CPU 资源,足以降低性能。

    集群可以分配作负载,无论是分配给同一服务器上的实例还是跨多个服务器的实例。

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

数据的分布方式

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

在 Redis Cloud 集群中,密钥空间被分区为 hash 插槽。在任何给定时间,哈希槽驻留在单个 Redis 服务器。

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

即使使用多个 Redis 进程,使用 Redis Enterprise Cloud 集群对应用程序几乎透明 使用它。该集群可通过单个终端节点访问,该终端节点 自动将所有作路由到相关的分片,而不使用 集群感知型 Redis 客户端的复杂性。这允许应用程序 无需执行任何代码更改即可使用集群,甚至 如果他们事先没有设计为使用它。

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

多键作

对分片 Redis Cloud 集群中的多个 key 的作 受支持,但存在以下限制:

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

管理哈希策略

Redis 默认使用标准哈希策略。 支持更改 Redis Cloud 实例的集群配置。 但是,哈希策略更改会删除现有数据 (FLUSHDB) 的 SET 文件。

这些更改包括:

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

标准哈希策略

使用标准哈希策略时,Redis Cloud 集群 的行为类似于标准 Redis 集群,而哈希是 执行如下:

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

您可以使用 '{...}' 模式将相关键定向到相同的哈希值 slot 的 intent作,以便在其上支持多键作。另一方面 hand,则不在键的名称中使用井号标签会导致 (统计上)键在键空间的分片中均匀分布, 从而提高资源利用率。 如果您的应用程序不执行多键作,则不会 需要使用主题标签构建键名称。

自定义哈希策略

Redis Cloud 集群可以配置为使用自定义哈希 政策。当不同的 key 需要时,需要自定义哈希策略 一起保存在同一个分片上,以允许多键作。雷迪斯 Cloud 的自定义哈希策略是通过一组 Perl 兼容的正则表达式 (PCRE) 规则,用于描述数据集的 键名称模式。

要配置自定义哈希策略,请输入正则表达式 (RegEx) 标识键名称中的子字符串的规则 - 井号标签 - ON 将进行哪些哈希处理。哈希标签在 RegEx 中用 使用 subpattern 的 'tag' 。具有 相同的主题标签将在同一插槽中存储和管理。

启用自定义哈希策略后,Redis Cloud 的 实施标准哈希策略的默认 RegEx 规则包括:

RegEx 规则 描述
.*{(?<tag>.*)}.* 哈希处理是在大括号之间的子字符串上完成的。
(?<tag>.*) 整个 key 的名称用于哈希。

您可以修改现有规则、添加新规则、删除规则或更改 他们的顺序以满足您的应用要求。

自定义哈希策略说明和限制

  1. 您最多可以定义 32 个 RegEx 规则,每个规则最多 256 个字符。
  2. RegEx 规则按其顺序进行评估。
  3. 使用匹配的第一个规则;努力放置通用键名称 patterns 的规则列表的开头。
  4. 与任何 RegEx 规则都不匹配的键名称会触发 错误。
  5. '.*(?<tag>)' 正则表达式规则将密钥强制放入单个槽中,因为 哈希键始终为空。使用时,这应该是最后一个 catch-all 规则。
  6. 在我们的正则表达式解析器中启用了以下标志:
    • PCRE_ANCHORED:模式被限制为仅在 正在搜索的字符串的开头。

集群 API

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

客户端必须首先连接到主节点才能获得集群拓扑。 然后,它们直接连接到托管主分片的每个节点上的 Redis 代理。

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

集群 API 仅在 Redis Cloud Pro 数据库上受支持。您可以在配置屏幕的 Performance (性能) 部分中启用它。

选择 OSS 集群 API 后,如果要将外部终端节点用于数据库,可以选择使用外部终端节点。选择 Use external endpoint (使用外部终结点) 将阻止此数据库的专用终结点。

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

查看 Redis 集群 API 架构,以确定是否应该为数据库启用此功能。

为本页评分
返回顶部 ↑