我有正在考虑迁移到Redis Cluster的Lua脚本
通话时是否应指定完整的键名eval?还是仅指定标签就可以逃脱?
eval
例如,我只希望通过{UNIQUE_HASH_TAG}替代{UNIQUE_HASH_TAG}/key1,{UNIQUE_HASH_TAG}/key2…等
{UNIQUE_HASH_TAG}
{UNIQUE_HASH_TAG}/key1
{UNIQUE_HASH_TAG}/key2
我有很多键,逻辑也很复杂-有时我最终会 在同一 哈希标签内动态生成键名。
我会通过仅传递哈希标签而不是键名来违反某些规范吗?
我应该指定完整的键名吗
这是推荐的做法。
我会违反一些规格吗
不,规范没有声明键名称需要显式传递。将KEYS/ ARGV机制到位,在群集的准备,但集群之前居然走过来的。那时,哈希标签还不是集群设计的一部分,因此 建议 避免在脚本中进行硬编码/动态生成键名,因为不能保证它们将位于同一集群哈希槽中。
KEYS
ARGV
您的方法是完全有效的,并且可以按预期工作。我确实要强调一点,只有在您管理许多所谓的{UNIQUE_HASH_TAG}时,这才有意义- 否则,您只会碰到几个插槽,这可能会成为可伸缩性挑战。
编辑 :这么说,您确实应该 始终 将键名显式传递给脚本,而不是欺骗。尽管目前尚未阻止此行为,但是这种未指定的行为将来可能会更改,并会导致代码损坏。