环境:Redis群集
您好。 我的要求是:
查找值-B思想键-A(进程是使用键-A找出值-A,值-A ==键-B,使用键-B找出值-B)
我的卢阿看起来像这样:
[root @ ml-208 redis] #cat x-userid-tag.lua
local f3=redis.call('HGET',KEYS[1],'1'); local f4=redis.call('HGET',f3,'1') ; return f4;
我的redis cmd:
./bin/redis-cli -c -h 192.168.33.203 -p 6000 --eval ./x-userid-tag.lua 0C559F3FEF368A8B53DE69C267423F0E
错误消息: (错误)ERR运行脚本时出错(调用f_9bd20ba85f7bcc8ee1f6b55c4158bfa93eba2221):@ user_script:2:@user_script:2:Lua脚本试图访问集群节点中的非本地密钥
答案 0 :(得分:2)
Lua脚本只在一个redis实例上运行,其内部查询不会被集群重定向,因此,如果两个密钥存在于另一个集群中,它就无法查询这两个密钥。
在您的情况下,keyA和valueA(它是keyB)被散列到不同的插槽和不同的节点,因此lua将无法工作。
解决此问题的一种方法是将以下内容作为键和值。
如果您有' key1',其值为' value1',而不是将其值/ key2保持为' value1',您应该保留它as' {key1}:value1'。 Redis将确保' key1'和' {key1}:value1'被散列到单个节点,您将能够使用lua查询它们。