Bulk операции
Тема дорожной карты · Redis
Массовые операции Redis позволяют клиентам отправлять несколько команд за один сетевой круговой обход, резко снижая задержку для рабочих нагрузок, требующих множества небольших операций записи или чтения. Пайплайнинг с помощью redis-cli --pipe или API пайплайнов клиентских библиотек группирует команды, не ожидая отдельных ответов, достигая пропускной способности, близкой к пределу TCP-канала. Команды MSET и MGET атомарно устанавливают или получают несколько строковых ключей за одну операцию, а HMSET и HMGET делают то же самое для полей хэша. Для отсортированных множеств и списков такие команды, как ZADD и LPUSH, принимают несколько элементов в одном вызове, дополнительно сокращая число круговых обходов. Массовые операции особенно эффективны в развёртываниях Redis Cluster, когда ключи расположены в одном хэш-слоте.
Как это работает
Bulk операции батчит несколько команд в один round trip. Без pipelining N команд = N RTT (network latency доминирует для маленьких команд). С pipelining клиент шлёт все N команд, потом читает все N ответов — один RTT на батч. У большинства клиентов есть pipeline() / multi(). Порядок сохраняется; команды всё равно исполняются по очереди на сервере (без атомарности — для неё MULTI/EXEC).
Когда применять
Pipelining — когда есть известный батч независимых команд (bulk insert, multi-get, fan-out write). Прирост throughput в 5-50× типичен для маленьких команд через сеть 1ms. Комбинируйте с MULTI/EXEC для "атомарно + батч". Не пайплайните огромные батчи без flush — память растёт на клиенте.
Типичные ошибки
Ловушки Bulk операции: pipelining 1M команд без периодического flush (RAM клиента взрывается); путаница pipelining с транзакциями (без атомарности — конкурентные команды с другого соединения могут вклиниться); error handling, съедающий ошибки в середине pipeline (нужно проверять каждый ответ).