我应该在Redis群集中使用Lua时指定完整的密钥名称,还是只能传递主题标签?

let*_*4be 7 lua redis

我有Lua脚本,我正在考虑迁移到Redis Cluster

我应该在通话时指定完整的密钥名称eval吗?或者我可以通过指定主题标签逃脱?

例如,我想只传递{UNIQUE_HASH_TAG}代替{UNIQUE_HASH_TAG}/key1,{UNIQUE_HASH_TAG}/key2...等

我有很多键,逻辑非常复杂 - 有时我最终动态生成键名但在同一个哈希标记内.

我是否会通过传递哈希标签而不是密钥名称来违反某些规范?

Ita*_*ber 4

我应该指定完整的键名吗

这是推荐的做法。

我会违反一些规范吗

不,规范没有规定需要显式传递键名称。KEYS/机制ARGV是在集群真正形成之前就已经为集群做准备而建立的。当时,哈希标签不是集群设计的一部分,因此建议避免在脚本中硬编码/动态生成键名称,因为无法保证它们位于同一集群哈希槽中。

您的方法完全有效并且会按预期工作。我确实想强调,只有当您管理大量所谓的 {UNIQUE_HASH_TAG} 时,这才有意义 - 否则您只会遇到几个插槽,这可能会成为可扩展性的挑战。

编辑:话虽如此,您确实应该始终显式地将键名称传递给脚本而不是欺骗。虽然目前尚未阻止这种行为,但这种未指定的行为将来可能会发生变化并导致代码损坏。