在 Redis Cluster 中使用 Lua 时,我需要指定完整的键名吗?还是只需要传递哈希标记就可以了?

我有一份 Lua 脚本,我正在考虑将其迁移到 Redis 集群上。

当调用 eval 时,我应该指定完整的键名,还是只需指定哈希标签就可以了?

例如,我希望只传递 {UNIQUE_HASH_TAG},而不是 {UNIQUE_HASH_TAG}/key1{UNIQUE_HASH_TAG}/key2 等。

我有很多键,逻辑相当复杂 - 有时我最终生成动态键名但在 同一 哈希标签内。

通过只传递哈希标签而不是键名,我会违反某些规定吗?

点赞
用户3160475
用户3160475

我需要指定完整的键名吗

这是推荐的做法。

我会违反一些规范吗

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

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

编辑:话虽如此,您真的应该始终明确地将键名传递到脚本中,而不是来回欺骗。虽然这目前没有被阻止,但这种未指定的行为可能会在将来发生改变,并导致您的代码中断。

2016-01-13 10:34:42