java绝地武士团结果不等于redis llen
我遇到了一个关于Redis及其Java客户机Jedis的非常奇怪的问题。我在Redis中有两个名为workMQ
和backupMQ
的列表,当我在Redis cli中执行llen workMQ
时,它返回16
。然而,当我在Java代码中用Jedis执行jedis.llen("workMQ")
时,它返回0
。但是,当Java代码中运行jedis.lpush("workMQ", "data")
时,新数据会变成llen workMQ
。为什么jedis.llen("workMQ")
无法识别此列表中剩余的16
数据项
在这个奇怪的问题发生之前,我对Lua脚本进行了如下操作
eval "for i = 1, 10 do\r redis.call('rpoplpush', 'backupMQ', 'workMQ')\r end" 0
实际上这个Lua脚本有一些错误,正确的是
eval "for i = 1, 10 do\r redis.call('rpoplpush', KEYS[1], KEYS[2])\r end" 2 backupMQ workMQ
也许Redis和Lua之间存在某种类型错误。我已经执行了这两个Lua脚本,但仍然无法工作
注:我的绝地客户的版本是2.7.2,绝地Github的最新稳定版本
谢谢你抽出时间
解决:一晚后,Redis服务器神奇地识别出workMQ的项目长度,一切正常。真奇怪
# 1 楼答案
这种奇怪的事情不可能发生。你一定是搞错了。例如,redis cli可以接受“llen(workMQ)”之类的命令?还是你说的是“艾伦·沃克”
我认为你很可能是在使用绝地武士在不同于redis cli的列表键上操作
lua问题很简单,你应该在lua脚本的末尾返回一个值(根据你的意愿)。如果仍然不起作用,请为我发布详细的错误信息