Один из способов сделать это - вытолкнуть записи из очереди, упаковать их, перетасовать пакет и затем снова вставить их:
key = "resque:queue:bulk"
total = Redis.current.llen(key)
batch_size = 5_000 # any value that is good enough for you
batch = []
total.times do |i|
entry = Redis.current.lpop(key)
batch << entry
if batch.size == batch_size
puts "re-inserting batch..."
Redis.current.rpush key, batch.shuffle
batch = []
end
end
Это действительно полезно, когда вы ошибочно ставите несколькозадания, которые в конечном итоге побеждают за общими ресурсами, замками и т. д.