数据库集群

集群允许客户将 Redis 进程的负载分散到多个内核和多个服务器的 RAM 上。

Redis 企业软件

源代码可用 Redis 是一个单线程进程 提供速度和简单性。 单个 Redis 进程受运行它的 CPU 内核和服务器上的可用内存的约束。

Redis Enterprise Software 支持数据库集群,以允许客户 将 Redis 进程的负载分散到多个内核和多个服务器的 RAM 上。 数据库集群是一组 Redis 进程,其中每个进程管理数据库密钥空间的一个子集。

Redis Enterprise 集群的密钥空间被划分为多个数据库分片。 每个分片驻留在单个节点上,并由该节点管理。 Redis 数据库集群中的每个节点都可以管理多个分片。 分片中的键空间被划分为哈希槽。 key 的 slot 由 key name 的哈希值或 key name 的一部分确定。

数据库集群对于连接到数据库的 Redis 客户端是透明的。 Redis 客户端通过单个终端节点访问数据库,该终端节点会自动将所有作路由到相关分片。 您可以将应用程序连接到单个 Redis 进程或集群数据库,而应用程序逻辑没有任何差异。

术语

在聚类中,通常使用以下术语:

  • 标签或哈希标签 - 哈希计算中使用的键的一部分。
  • Slot 或 Hash Slot - 哈希计算的结果。
  • 分片 - Redis 集群数据库的一部分的 Redis 进程。

何时使用集群 (分片)

集群是扩展 Redis 的一种有效方法,应在以下情况下使用:

  • 数据集足够大,可以从使用多个节点的 RAM 资源中受益。 当数据集超过 25 GB(RoF 为 50 GB)时,我们建议您启用集群以创建数据库的多个分片 并将数据请求分散到各个节点。
  • 对数据库执行的作是 CPU 密集型的,从而导致性能下降。 通过让多个 CPU 内核管理数据库的分片,作负载在它们之间分配。

分片数量

启用数据库集群时,您可以设置数据库的数量 碎片。每个数据库的最小分片数为 2 个,最大值为 取决于您购买的订阅。

启用数据库集群并设置分片数量后,您将无法停用数据库集群或减少 碎片。您只能将分片数量增加 当前分片数。例如,如果当前分片数 为 3,则可以将分片数量增加到 6、9 或 12。

支持的哈希策略

标准哈希策略

使用标准哈希策略时,集群 Redis Enterprise 数据库的行为与标准 Redis Community Edition 集群类似,但在键名称中使用多个哈希标签时除外。我们建议在 Redis Enterprise 中仅使用键名称中的单个哈希标签进行哈希处理。

  • 带有哈希标签的键:键的哈希标签是键名称之间和名称中的任何子字符串。当键的名称 包括模式{}{...},哈希标签用作 hashing 函数。

    例如,以下键名称具有相同的 hash tag 并映射到同一个 hash slot:foo{bar},{bar}bazfoo{bar}baz.

  • 没有哈希标签的 Key:当 Key 不包含{...}pattern,则整个 key 的名称用于哈希。

您可以使用哈希标签将相关键存储在同一个哈希中 slot 的 intent作,以便多键作可以在这些键上运行。如果您未在密钥名称中使用哈希标签,则密钥将均匀分布在密钥空间的分片中。 如果您的应用程序不执行多键作,则不需要 需要使用哈希标签。

自定义哈希策略

您可以为集群数据库配置自定义哈希策略。一个 当需要保留不同的 key 时,需要自定义哈希策略 一起放在同一个分片上,以允许多键作。自定义 哈希策略通过一组 Perl Compatible Regular 提供 描述数据集的键名称模式的表达式 (PCRE) 规则。

要配置自定义哈希策略,请输入正则表达式 (RegEx) 规则,用于标识键名称中的子字符串 - 哈希标签 -- 完成哈希处理。hash 标签在 RegEx 通过使用名为 subpattern 的 'tag' 来调用。不同的键 相同的哈希标签在同一个插槽中存储和管理。

启用自定义哈希策略后,以下默认 RegEx 规则已实施。更新这些规则以适应您的特定逻辑:

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

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

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

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

更改哈希策略

可以更改集群数据库的哈希策略。然而 大多数哈希策略更改都会触发 (FLUSHDB) 数据。

此类更改的示例包括:

  • 将哈希策略从标准更改为自定义,或者相反, 自定义到标准。
  • 更改自定义哈希策略规则的顺序。
  • 在自定义哈希策略中添加新规则。
  • 从自定义哈希策略中删除规则。
注意:
未启用的更新的推荐解决方法 或需要刷新数据库, 是备份数据库并将数据导入到新配置的数据库中。

多键作

支持对集群数据库中的多个键的作 以下限制:

  • 多键命令:Redis 提供了几个接受 多个 key 作为参数。在集群数据库中,大多数多键 不允许跨槽执行命令。以下多键 允许跨槽执行命令:DEL、MSET、MGET、EXISTS、UNLINK、TOUCH

    在主动-主动数据库中,多键写入命令(DEL、MSET、UNLINK)只能在位于同一槽中的键上运行。但是,在主动-主动数据库中的槽中允许使用以下多键命令:MGET、EXISTS 和 TOUCH。

    允许使用影响所有键或与指定模式匹配的键的命令 在集群数据库中,例如:FLUSHDB、FLUSHALL、KEYS

    注意:
    在分片设置中使用这些命令时, 该命令分布在多个分片中 来自所有分片的响应将合并为一个响应。
  • Geo 命令:对于 GEORADIUSGEORADIUSBYMEMBER 命令, STORE 和 STOREDIST 选项只能在所有受影响的键时使用 位于同一插槽中。

  • 事务:WATCH / MULTI / EXEC 区块内的所有作 应该在映射到同一插槽的键上执行。

  • Lua 脚本:Lua 脚本使用的所有键必须映射到相同的 插槽,并且必须作为 EVAL / EVALSHA 命令的参数提供 (根据 Redis 规范)。在 Lua 脚本中使用键 未提供,因为参数可能违反分片概念 但不会导致返回正确的冲突错误。

  • 重命名/复制键:RENAME / RENAMENX / COPY 命令的用途是 仅当键的原始值和新值映射到 相同的插槽。

为本页评分
返回顶部 ↑