数据库集群
集群允许客户将 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}baz
和foo{bar}baz
. -
没有哈希标签的 Key:当 Key 不包含
{...}
pattern,则整个 key 的名称用于哈希。
您可以使用哈希标签将相关键存储在同一个哈希中 slot 的 intent作,以便多键作可以在这些键上运行。如果您未在密钥名称中使用哈希标签,则密钥将均匀分布在密钥空间的分片中。 如果您的应用程序不执行多键作,则不需要 需要使用哈希标签。
自定义哈希策略
您可以为集群数据库配置自定义哈希策略。一个 当需要保留不同的 key 时,需要自定义哈希策略 一起放在同一个分片上,以允许多键作。自定义 哈希策略通过一组 Perl Compatible Regular 提供 描述数据集的键名称模式的表达式 (PCRE) 规则。
要配置自定义哈希策略,请输入正则表达式 (RegEx) 规则,用于标识键名称中的子字符串 - 哈希标签 -- 完成哈希处理。hash 标签在 RegEx 通过使用名为 subpattern 的 'tag' 来调用。不同的键 相同的哈希标签在同一个插槽中存储和管理。
启用自定义哈希策略后,以下默认 RegEx 规则已实施。更新这些规则以适应您的特定逻辑:
RegEx 规则 | 描述 |
---|---|
.*{(?<tag>.*)}.* | 哈希处理是在大括号之间的子字符串上完成的。 |
(?<tag>.*) | 整个 key 的名称用于哈希。 |
您可以修改现有规则、添加新规则、删除规则或更改 他们的顺序以满足您的应用要求。
自定义哈希策略说明和限制
- 您最多可以定义 32 个 RegEx 规则,每个规则最多 256 个字符。
- 将按顺序评估 RegEx 规则,第一个规则匹配 被使用。因此,您应该将通用键名称模式放在 规则列表的开头。
- 与任何 RegEx 规则都不匹配的键名称会触发 错误。
- '.*(?<tag>)' 正则表达式规则强制键进入单个槽 因为哈希键始终为空。因此,在使用时, 这应该是最后一条 catch-all 规则。
- 在正则表达式解析器中启用以下标志: PCRE_ANCHORED:模式被限制为仅在 正在搜索的字符串的 start 开始。
更改哈希策略
可以更改集群数据库的哈希策略。然而 大多数哈希策略更改都会触发 (FLUSHDB) 数据。
此类更改的示例包括:
- 将哈希策略从标准更改为自定义,或者相反, 自定义到标准。
- 更改自定义哈希策略规则的顺序。
- 在自定义哈希策略中添加新规则。
- 从自定义哈希策略中删除规则。
多键作
支持对集群数据库中的多个键的作 以下限制:
-
多键命令:Redis 提供了几个接受 多个 key 作为参数。在集群数据库中,大多数多键 不允许跨槽执行命令。以下多键 允许跨槽执行命令:DEL、MSET、MGET、EXISTS、UNLINK、TOUCH
在主动-主动数据库中,多键写入命令(DEL、MSET、UNLINK)只能在位于同一槽中的键上运行。但是,在主动-主动数据库中的槽中允许使用以下多键命令:MGET、EXISTS 和 TOUCH。
允许使用影响所有键或与指定模式匹配的键的命令 在集群数据库中,例如:FLUSHDB、FLUSHALL、KEYS
注意:在分片设置中使用这些命令时, 该命令分布在多个分片中 来自所有分片的响应将合并为一个响应。 -
Geo 命令:对于 GEORADIUS 和 GEORADIUSBYMEMBER 命令, STORE 和 STOREDIST 选项只能在所有受影响的键时使用 位于同一插槽中。
-
事务:WATCH / MULTI / EXEC 区块内的所有作 应该在映射到同一插槽的键上执行。
-
Lua 脚本:Lua 脚本使用的所有键必须映射到相同的 插槽,并且必须作为 EVAL / EVALSHA 命令的参数提供 (根据 Redis 规范)。在 Lua 脚本中使用键 未提供,因为参数可能违反分片概念 但不会导致返回正确的冲突错误。
-
重命名/复制键:RENAME / RENAMENX / COPY 命令的用途是 仅当键的原始值和新值映射到 相同的插槽。