如何为 Redis 中存储为字节数组的 uuid 键正确设置哈希标签

问题描述 投票:0回答:1

根据 Redis 文档 主题标签可用于强制将键分配到同一散列槽。我有一个用例,我们将 {UUID}Integer 存储为 Redis 中的字节数组,我希望仅使用 UUID 部分来分配哈希槽。 我们面临的问题是,如果 UUID 包含字符

7b
7d
,它会与分别由 ASCII 字节值 123 (0x7b) 和 125 (0x7d) 表示的
{
}
发生冲突,从而影响这些密钥的分配。

例如 - 当与主题标签一起存储在 Redis 中时,

7d3e4567-e89b-12d3-a456-426614174000
会打印为
{}>Eg\xe8\x9b\x12\xd3\xa4VBf\x14\x17@\x00}

有没有办法转义 UUID 中的字符以使哈希槽计算正常工作,或者还有其他解决方法吗?

database redis
1个回答
0
投票

无法告诉 Redis

7b
7d
字节不是大括号。

解决这个问题的唯一方法是对 UUID 进行不同的编码。

我假设您关心编码速度和内存消耗。目前,每个 UUID 使用 16 个字节,这是最佳选择。

您可以使用Base64编码来避免这个问题。每个 UUID 需要 22 个字节。

另一种选择是使用自定义编码:每 7 位都转换为一个字符

00
..
81
,除了
7b
7d
之外。编码相对简单 - 您必须一次提取 7 位,并将
7b
替换为
80
,将
7d
替换为
81
。每个 UUID 需要 18 个字节。

更复杂的编码可以将这个数字减少到 17 个字节,但很可能需要更多的计算。

© www.soinside.com 2019 - 2024. All rights reserved.