一尘不染

在Redis Cluster中使用Lua时应该指定完整的密钥名称,还是可以仅传递#标签?

redis

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

通话时是否应指定完整的键名eval?还是仅指定标签就可以逃脱?

例如,我只希望通过{UNIQUE_HASH_TAG}替代{UNIQUE_HASH_TAG}/key1{UNIQUE_HASH_TAG}/key2…等

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

我会通过仅传递哈希标签而不是键名来违反某些规范吗?


阅读 334

收藏
2020-06-20

共1个答案

一尘不染

我应该指定完整的键名吗

这是推荐的做法。

我会违反一些规格吗

不,规范没有声明键名称需要显式传递。将KEYS/ ARGV机制到位,在群集的准备,但集群之前居然走过来的。那时,哈希标签还不是集群设计的一部分,因此
建议 避免在脚本中进行硬编码/动态生成键名,因为不能保证它们将位于同一集群哈希槽中。

您的方法是完全有效的,并且可以按预期工作。我确实要强调一点,只有在您管理许多所谓的{UNIQUE_HASH_TAG}时,这才有意义-
否则,您只会碰到几个插槽,这可能会成为可伸缩性挑战。

编辑 :这么说,您确实应该 始终
将键名显式传递给脚本,而不是欺骗。尽管目前尚未阻止此行为,但是这种未指定的行为将来可能会更改,并会导致代码损坏。

2020-06-20