这是一个示例场景来说明:
假设我们有一些 key=>value 对:
hmset thing1 name 'a thing' color red
hmset thing2 name 'another thing' color green
hmset thing3 name 'also a thing' color blue
以及一个其值为键名的列表:
lpush things thing1
lpush things thing2
lpush things thing3
我的目标是使用间接从一系列事物中获取值:
thingsArray = lrange things 0 2
for each thing in thingsArray
result.push(hmget thing name color)
但这样做的代价是额外的往返行程。我意识到这可以通过流水线在一定程度上得到缓解,但希望只需使用 Lua 脚本进行一次往返即可。所以像:
eval superAwesomeScript 1 things 0 2
问题是,当我调用 Lua 脚本时,我不知道“事物”列表上的 lrange 调用将返回哪些键。在 Lua 脚本中以这种方式访问数据是否违反了针对 Redis 集群的未来验证建议的规则?
我对 Redis 还很陌生,而且对 Lua 完全是个菜鸟,所以如果我的目标离我很远,请告诉我。此外,我对多次往返的主要关注是网络 io,尤其是在水平扩展的集群中。因此,完全不同的解决方案也将受到欢迎。