# Check processing queue for any previously unprocessed items.
# If previously unprocessed item
# Check if item key is not expired and push back to processing queue
# Otherwise push back onto work queue
# (May want to r_push if we need immediate processing)
lua_script = f"""
local saved_item = redis.call('rpop', 'processing_list')
if (saved_item ~= nil) then
if (redis.call('exists', 'processing_list' .. _ .. saved_item) == 1) then
redis.call('lpush', 'processing_list', saved_item)
else
redis.call('lpush', 'work_list', saved_item)
end
end
"""
self._queue_client.get_redis_client().eval(lua_script, 0)
Выше я пытаюсь реализовать стойкую очередь с помощью redis. Мне нужно, чтобы эта часть logi c была atomi c, но, поскольку транзакции redis не допускают промежуточных операций чтения и записи, мне пришлось прибегнуть к lua. Проблема в том, что начальная строка «rpop» не работает. Я проверил в своем redis-cli, что он возвращает (nil) и, следовательно, переменная «saved_item» никогда не устанавливается правильно. Есть ли лучший подход для выполнения sh этого промежуточного чтения, а затем условного logi c с использованием этого значения?