Очереди это, как уже сказал
bmalets, что-то вроде списков задач. Они нужны в основном для управлением нагрузкой, параллельностью. По дефолту есть только очередь default.
Классический пример разделения очередей:
- mailer - очередь для рассылки почтовых сообщения пользователям
- default - для всего остального
Можно сделать так что для очереди mailer вы запускаете 10 процессов (не воркеров, а именно процессов ОС), а для default только 1. Тем самым вы делаете приоритетной очередь mailer.
Распределением нагрузки можно также управлять с помощью "весов" (параметр -q mailer,9 default,1 ). В данном случае из 10 задач 9 будут взяты из очереди mailer и только одна из очереди default.
Под воркерами могут подразумеваться два понятия:
- воркер как процесс ОС который берет задачи из очередей на выполнение
- воркер как класс руби, который выполняет какую-то бизнес-задачу
В основном конечно же под воркерами подразумевается второй вариант.
По вашим вопросам:
- как воркеры исполняются?
Процесс-обработчик берет задачу из redis и выполняет её. Тут важно понимать, что при аварийном завершении работы процесса вы можете потерять задачу (такие кейсы бывают очень критичными для бизнеса).
- какой обьём памяти для этого нужен?
Объем данных в redis'е можно посмотреть в админском интерфейсе.
- почему redis
Кто знает...
- как это работает с redis
???
- почему в perform_async нельзя передовать сами обьекты? а только id, strings, json ...?
Можно, но не нужно. Все что попадает в perform_async должно попадать в redis. А это накладные расходы на хранение, сериализацию/десериализацию.
- Как правильно вызывать и добавлять очереди.
Что вы имели ввиду под "вызывать очереди"? Очереди добавляются автоматически
Вообще формат хранения можно запросто посмотреть в самом редисе.