Redis Cluster 中的 HashSlot

目前,我有以下的 Lua 脚本 local job_id = KEYS[1]; local job_body = KEYS[2]; if job_id == nil or job_id == '' then error('无效的任务 ID') end; if job_body == nil or job_body == '' then error('无效的任务内容') end; redis.call('HSET', 'JOB:WORK_BODY', job_id, job_body);

这个脚本被使用 Jedis Cluster 实现的 evalsha 调用,如下:连接.evalsha(script, 2, jobId, jobBody)

在普通 Redis 中,这个脚本可以正常工作,但在 Redis Cluster 中,会出现 "JedisClusterOperationException: Keys must belong to same hashslot" 的错误

文档中提到添加 {} 到键中,但是我无法理解在以上代码中应该在哪里以及如何添加。

如果有任何帮助,将不胜感激。我已经被这个问题困扰很长时间了。

提前感谢。

原文链接 https://stackoverflow.com/questions/70795035

点赞
stackoverflow用户5384363
stackoverflow用户5384363

你应该将 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)
2022-01-21 02:11:01