Я столкнулся с очень странной проблемой, связанной с Redis и его Java-клиентом Jedis. У меня есть два списка в Redis с именами workMQ
и backupMQ
, когда я выполняю llen workMQ
в redis-cli, он возвращает 16
. Однако, когда я выполняю jedis.llen("workMQ")
в коде Java с помощью Jedis, он возвращает 0
. Но когда новые данные поступают в результате выполнения jedis.lpush("workMQ", "data")
в кодах Java, Redis llen workMQ
становится 1
. Почему jedis.llen("workMQ")
не смог распознать оставшиеся 16
элементы данных в этом списке?
Прежде чем возникла эта странная проблема, я rpoplpush
работал со сценарием 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, но все еще не могу работать.
PS: Версия моего клиента Jedis - 2.7.2, последняя стабильная версия от Jedis Github.
Спасибо за ваше время.
Решено: через одну ночь сервер Redis волшебным образом распознал длину элементов workMQ, и все в порядке. Это действительно странно.