intermediate

Lists

Используйте lists для simple ordered queues, понимая blocking operations и delivery limits.

Списки Redis — двусвязные списки строк: простые FIFO/LIFO очереди, буферы recent items и лёгкий staging задач. Producers делают push; consumers — pop или блокируются в ожидании работы.

					LPUSH jobs:email '{"id":1,"to":"a@b.c"}'
BRPOP jobs:email 30          # blocking consumer, таймаут 30 с
RPUSH logs:api "2026-06-15 ok"
LTRIM logs:api 0 999         # оставить последние 1000 записей
LLEN jobs:email
				

| Операция | Поведение | |----------|-----------| | `LPUSH` / `RPUSH` | Добавление в голову или хвост — O(1) | | `LPOP` / `RPOP` | Удаление одного элемента | | `BRPOP` / `BLPOP` | Блокировка до элемента или таймаута | | `LTRIM` | Фиксированное окно — паттерн ring buffer |

Списки сами по себе не durable message queue: извлечённый элемент исчезает, если нет reliable-queue паттерна (`RPOPLPUSH` в processing list или Streams). По умолчанию — at-most-once.

На интервью: опишите требования к очереди и почему подойдут lists, streams или настоящий broker.

Типовые ошибки: критичные workflow на lists без ack/retry; неограниченный рост списка; `BRPOP` без аналога visibility timeout; гонки нескольких consumers без координации.

Компромисс — простота и низкая latency vs гарантии доставки: lists уместны для best-effort распределения работы; durability и consumer groups — у streams или внешней очереди.

Чеклист:

  • Сформулируйте семантику доставки (at-most-once vs at-least-once).
  • Ограничивайте размер списка через `LTRIM` при буферизации.
  • Объясните blocking consumer и таймауты.
  • Назовите, когда lists заменяют Streams.