首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Redis脚本中正确传递复合键?

如何在Redis脚本中正确传递复合键?
EN

Stack Overflow用户
提问于 2022-02-21 09:32:10
回答 1查看 136关注 0票数 0

我有一个Redis系统,它使用键嵌套和键组合,前缀不同:

代码语言:javascript
复制
SET prefix-1:concrete-key-1 value-1
SET prefix-1:concrete-key-2 value-2
SET prefix-2:concrete-key-1 value-3
SET prefix-2:concrete-key-2 value-4
SET id-123 concrete-key-1
SET id-456 concrete-key-2
SET id-789 concrete-key-1

因此,通过使用id-xxx<prefix>,我可以在两个命令中得到特定的值

代码语言:javascript
复制
id-123 -> concrete-key-1
prefix-1 + concrete-key-1 -> value-1

为了减少redis呼叫和通信量,我创建了小型LUA脚本,用于在Redis端执行getter:

代码语言:javascript
复制
key = redis.call('GET', KEYS[1]);
return redis.call('GET', <prefix>..key);

问题是在这种情况下如何正确传递前缀?

根据Redis,我应该显式地指定键作为键参数:https://redis.io/topics/lua-api

我应该把它当作钥匙传递吗?

代码语言:javascript
复制
key = redis.call('GET', KEYS[1]);
return redis.call('GET', KEYS[2]..key);

但是没有独立的<prefix>键,它们都是由<prefix>:<key>组成的。那么,我应该把前缀作为一个论点传递吗?

代码语言:javascript
复制
key = redis.call('GET', KEYS[1]);
return redis.call('GET', ARGV[1]..key);

或者这样传下去是有意义的吗?是否有其他方法可以正确地使用脚本获得值?

EN

回答 1

Stack Overflow用户

发布于 2022-02-21 14:07:53

声明KEYS的目的是使Redis集群能够将脚本路由到正确的服务器,如果您试图引用驻留在不同服务器上的密钥,则会快速失败。有关更多细节,请参见我的答案here

因此,您的第一步是考虑是否所有可能的键组合都驻留在同一台服务器上。否则,您将无法在任何情况下运行脚本。

如果是这样的话,那么您当前只在id-123参数中传递KEYS键的方案是可以的。在KEYS中传递前缀绝对没有意义,因为它不是前缀,Redis将不知道该如何处理它。是否将其硬编码或传递到ARGV中取决于您,就像调用函数时一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71203968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档