我应该在Redis集群中使用Lua时指定全键名,还是只传递hashtags?

我应该在Redis集群中使用Lua时指定全键名,还是只传递hashtags?,lua,redis,Lua,Redis,我有一个Lua脚本,我正在考虑迁移到Redis集群 调用时是否应指定完整的键名? 或者我可以仅仅通过指定hashtags来逃脱吗 例如,我只希望传递{UNIQUE\u HASH\u TAG},而不是{UNIQUE\u HASH\u TAG}/key1,{UNIQUE\u HASH\u TAG}/key2。。。等 我有很多密钥,逻辑相当复杂——有时我会动态地生成密钥名,但在同一个哈希标记中 我只传递散列标签而不是密钥名是否会违反某些规范 我应该指定完整的密钥名吗 这是推荐的做法 我会违反一些规范吗

我有一个Lua脚本,我正在考虑迁移到Redis集群

调用时是否应指定完整的键名? 或者我可以仅仅通过指定hashtags来逃脱吗

例如,我只希望传递
{UNIQUE\u HASH\u TAG}
,而不是
{UNIQUE\u HASH\u TAG}/key1
{UNIQUE\u HASH\u TAG}/key2
。。。等

我有很多密钥,逻辑相当复杂——有时我会动态地生成密钥名,但在同一个哈希标记中

我只传递散列标签而不是密钥名是否会违反某些规范

我应该指定完整的密钥名吗

这是推荐的做法

我会违反一些规范吗

不,规范没有规定需要显式传递密钥名。
/
ARGV
机制是为集群做好准备的,但在集群实际运行之前。当时,哈希标记不是集群设计的一部分,因此建议避免在脚本中硬编码/动态生成密钥名,因为无法保证它们将位于同一集群哈希槽中

您的方法是完全有效的,并将按预期工作。我想强调的是,只有当您管理大量所谓的{UNIQUE_HASH_TAG}时,这才有意义,否则您只会占用一些插槽,这可能会成为一个可伸缩性挑战


EDIT:总之,您确实应该始终明确地将键名传递给脚本,而不是欺骗脚本。虽然这目前没有被阻止,但这种未指定的行为将来可能会改变,并导致代码中断。

这将使我的迁移完全不可能,不幸的是,我无法避免动态创建密钥(如果我们有嵌套的数据类型,如set-inside-set,这将不需要),但当我这样做的时候,我总是在标签中这样做……对于我的任务,我只需要redis集群的某些功能,例如在节点之间重新平衡数据的能力。作为替代方案,我正在考虑通过Lua+
Move
命令手动实现这一点(将数据集标记为不可用,在单个键中序列化数据集,以原子方式移动到另一个实例,反序列化,在新实例上标记为可用,删除原始数据集)-但这看起来像是重新发明轮子