关于Redis和它的Java客户端jedi,我遇到了一个非常奇怪的问题。我在Redis中有两个名为workMQ
和backupMQ
的列表,当我在Redis -cli中执行llen workMQ
时,它返回16
。然而,当我在Java代码中使用jedi执行jedis.llen("workMQ")
时,它返回0
。但是当新数据通过Java代码运行jedis.lpush("workMQ", "data")
时,Redis llen workMQ
变成1
。为什么jedis.llen("workMQ")
无法识别此列表中剩余的16
数据项?
在这个奇怪的问题发生之前,我用Lua脚本做了rpoplpush
操作,如下所示。
eval "for i = 1, 10 dor redis.call('rpoplpush', 'backupMQ', 'workMQ')r end" 0
其实这个Lua脚本有些错误,正确的是
eval "for i = 1, 10 dor redis.call('rpoplpush', KEYS[1], KEYS[2])r end" 2 backupMQ workMQ
可能在Redis和Lua之间有一些类型错误。我已经执行了这两个Lua脚本,但仍然不能工作。
PS:我的Jedis客户端版本是2.7.2,Jedis Github的最新稳定版本。
感谢您的宝贵时间。
Solved:一夜之后,Redis服务器神奇地识别出workMQ的项目长度,一切都很好。真奇怪。
-
这种奇怪的事情不可能发生。你一定是弄错了什么地方。例如,redis-cli可以接受" len(workMQ)"? 或者你的意思是"艾伦工作"?
我认为你很可能是在使用绝地武士操作不同于redis-cli的列表键!
-
lua问题很简单,您应该在lua脚本结束时返回一个值(根据您的意愿)。如果它仍然不能工作,请为我发布详细的错误信息!