绝地武士的进攻结果不等于redis的进攻



关于Redis和它的Java客户端jedi,我遇到了一个非常奇怪的问题。我在Redis中有两个名为workMQbackupMQ的列表,当我在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的项目长度,一切都很好。真奇怪。

  1. 这种奇怪的事情不可能发生。你一定是弄错了什么地方。例如,redis-cli可以接受" len(workMQ)"? 或者你的意思是"艾伦工作"?

    我认为你很可能是在使用绝地武士操作不同于redis-cli的列表键!

  2. lua问题很简单,您应该在lua脚本结束时返回一个值(根据您的意愿)。如果它仍然不能工作,请为我发布详细的错误信息!

最新更新