【问题标题】:HashSlots in Redis ClusterRedis 集群中的 HashSlots
【发布时间】:2022-01-21 14:47:21
【问题描述】:

目前我有以下 lua 脚本 本地工作 ID = KEYS[1];本地job_body = KEYS[2]; 如果 job_id ==nil 或 job_id == '' 那么 error('Invalid job id') end;如果 job_body ==nil 或 job_body == '' then error('Invalid job body') end; redis.call('HSET','JOB:WORK_BODY',job_id,job_body);

使用 evalsha 使用 jedis 集群实现调用 类似:connection.evalsha(script, 2, jobId, jobBody)

这在普通 redis 中运行良好,但在集群中失败,提示“JedisClusterOperationException:键必须属于同一个哈希槽”

文档谈到将 {} 添加到键中。但是无法在上面的代码中找到在哪里以及如何添加。

对此的任何帮助都会非常有帮助。卡在这里面好久了。

提前致谢

【问题讨论】:

    标签: java redis lua jedis redis-cluster


    【解决方案1】:

    您应该将job_idjob_body 传递为ARGV,而不是KEYS

    # script.lua
    local job_id = ARGV[1]; local job_body = ARGV[2]
    
    # other code
    

    我对 Jedis 不熟悉,但是你可以试试下面的代码:

    connection.evalsha(script, 1, "JOB:WORK_BODY", jobId, jobBody)
    
    

    【讨论】:

    • 您好,感谢您的回复。但没有运气,仍然面临同样的问题
    • 我的错。您需要设置一个密钥,因为您连接到一个集群。查看更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2020-07-01
    • 2016-05-22
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多