{"getBatch":"local call = redis.call\nlocal queue = KEYS[1]\nlocal maxBatchSize = tonumber(ARGV[1])\nlocal processingTimeout = tonumber(ARGV[2])\nlocal queueKey = '{' .. queue .. '}:messages'\nlocal processingKey = '{' .. queue .. '}:processing'\nlocal messages = {}\nfor i = 1, maxBatchSize do\n  local id = call('RPOPLPUSH', queueKey, processingKey)\n  if not id then\n    return messages\n  end\n  local messageKey = queueKey .. ':' .. id\n  local messageProcessingKey = messageKey .. ':processing'\n  local message = call('GET', messageKey)\n  messages[#messages + 1] = message\n  call('PSETEX', messageProcessingKey, processingTimeout, 1)\nend\nreturn messages\n","reinsertUnprocessed":"local call = redis.call\nlocal queue = KEYS[1]\nlocal maxMessages = tonumber(ARGV[1])\nlocal queueKey = '{' .. queue .. '}:messages'\nlocal processingKey = '{' .. queue .. '}:processing'\nlocal processingMessages = call('LRANGE', processingKey, 0 - maxMessages, -1)\nlocal ids = {}\nfor i = 1, #processingMessages do\n  local id = processingMessages[i]\n  local messageProcessingKey = queueKey .. ':' .. id .. ':processing'\n  local stillProcessing = call('EXISTS', messageProcessingKey)\n  if stillProcessing == 0 then\n    ids[#ids + 1] = id\n    call('RPUSH', queueKey, id)\n    call('LREM', processingKey, -1, id)\n  else\n    return ids\n  end\nend\nreturn ids\n","removeMessages":"local call = redis.call\nlocal queue = KEYS[1]\nlocal messages = ARGV\nlocal queueKey = '{' .. queue .. '}:messages' .. ':'\nlocal processingKey = '{' .. queue .. '}:processing'\nfor i = 1, #messages do\n  local id = messages[i]\n  local count = call('LREM', processingKey, -1, id)\n  if count == 1 then\n    local messageKey = queueKey .. id\n    local messageProcessingKey = messageKey .. ':processing'\n    call('DEL', messageKey, messageProcessingKey)\n  end\nend\nreturn messages\n"}