【问题标题】:Lua script attempted to access a non local key in a cluster nodeLua 脚本试图访问集群节点中的非本地密钥
【发布时间】:2018-09-12 08:23:42
【问题描述】:

环境:Redis 集群

嗨。 我的要求是:

用key-A找到value-B(过程是用key-A找出value-A,value-A == key-B,用key-B找出value-B)

我的 lua 看起来像这样:

[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 脚本试图访问集群节点中的非本地密钥

【问题讨论】:

    标签: lua redis redis-cluster


    【解决方案1】:

    Lua 脚本仅在一个 redis 实例上运行,其内部查询不会被集群重定向,因此,如果两个键存在于另一个集群中,它无法查询它们。

    在您的情况下,keyA 和 valueA(即 keyB)被散列到不同的插槽和不同的节点,因此 lua 将无法工作。

    修复它的一种方法是将以下内容作为键和值。

    如果你有一个'key1',并且它的值是'value1',而不是保持它的值/key2 为'value1',你应该保持它为'{key1}:value1'。 Redis 将确保 'key1' 和 '{key1}:value1' 都被散列到单个节点,并且您将能够使用 lua 查询它们。

    【讨论】:

    • 将第二行读作“如果两个键存在于另一个节点中,则无法查询它们。”
    • 感谢您的回复。根据我们的条件,我们不会采取这种解决方案。威尔,现在对我来说更清楚了。
    猜你喜欢
    • 2021-04-20
    • 2014-07-30
    • 2023-01-21
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多