我遇到了一个非常奇怪的问题,它的Java客户机。我在redis中有两个列表名为workMQbackupMQ,当我在redis cli中执行llen workMQ时,它返回16。但是,当我用JEDIS在Java代码中执行jedis.llen("workMQ")时,它返回0。但是当新的数据在Java代码中运行jedis.lpush("workMQ", "data")时,ReISIS llen workMQ成为1。为什么jedis.llen("workMQ")无法识别此列表中剩余的16数据项?
在这个奇怪的问题出现之前,我使用lua脚本进行了如下操作。
rpoplpush
实际上这个lua脚本有一些错误,正确的是
eval "for i = 1, 10 do\r redis.call('rpoplpush', 'backupMQ', 'workMQ')\r end" 0
可能redis和lua之间有类型错误。我已经执行了这两个lua脚本,但仍然不能工作。
附:我的绝地客户的版本是2.7.2,是绝地github的最新稳定版本。
谢谢你的时间。
解决方法:一夜之后,redis服务器神奇地识别出workmq的条目长度,一切正常。真奇怪。

最佳答案

这种奇怪的事情是不可能发生的。你一定是搞错什么了。例如,redis cli可以接受“llen(workmq)”?或者你的意思是“Llen WorkMQ”?
我觉得你很可能是在用绝地来操作一个不同于redis cli的列表键!
lua问题很简单,您应该在lua脚本的末尾(根据您的意愿)返回一个值。如果仍然不起作用,请为我发布详细的错误信息!

09-05 11:00