gpt4 book ai didi

Redis 模块 - 以集群的方式访问多个键

转载 作者:可可西里 更新时间:2023-11-01 11:14:42 24 4
gpt4 key购买 nike

我有一个带有自定义命令的 Redis 模块,可以同时向两个不同的键发出命令。

自定义命令接收一个 key (例如 myKey)和一些值,并发出 HSET myKey_sd1 ...ZADD myKey_sd2 ...命令。

我想知道在集群配置中会发生什么,其中每个键都可以存在于一个单独的节点中。

现在,在模块的自定义命令中,我在 {} 中封装了给我的 key ,所以我最终发出了 HSET {myKey }_sd1ZADD {myKey}_sd2

哪个有效,但我想知道是否有必要。

我也想知道如果我收到一个已经用大括号括起来的 key 会发生什么(因为模块的用户想自己控制哈希槽)——例如123_{myKey}

现在,当我发出 HSET 和 ZADD - HSET {123_{myKey}}_sd1 ...ZSET {123_ 时,我仍然会将此 key 括在我自己的大括号中{myKey}}_sd2

在这种情况下,据我所知,Redis 会计算 123_{myKey 的散列,这会破坏用户的输入(因为他们不希望包含 123_ 部分)

要修复它,我可以让我的自定义命令在它收到的 key 中查找 {,如果它没有找到 {,它将包含{} 中的键,就像我上面描述的那样。但是,如果它确实找到了 {,它会将 key 保持原样,从而导致(在上面的示例中)HSET 123_{myKey}_sd1 ...ZADD 123_{myKey}_sd2 - 这对用户和模块的内部工作都有效。

所以我想

  1. {} 中包含我从用户那里收到的 key 是否是支持集群的正确方法?

  2. 如果是这样,我是否处理了用户提供的 key 已经以正确的方式包含在 {} 中的情况?

最佳答案

  1. Is enclosing the keys that I receive from the user in { and } the right way to support clustering?

Redis 模块集群文档是 "missing" ,但我相信您的模块必须确保使用与作为参数传递的键相同的节点。

所以,是的,您必须使用散列标签来确保您的 key 使用与传递的 key 相同的散列槽。

  1. If so, am I handling the case where the user provides a key which is already enclosed in { and } in the right way?

您建议的修复(不是您当前的实现)是正确的。您必须散列到与传递的 key 相同的槽,这意味着尊重任何指定的散列槽。

只需确保您关注 exact algorithm用于解释哈希标签。你不想在这里出现任何边缘情况。

关于Redis 模块 - 以集群的方式访问多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54616361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com