Как гарантировать доставку в Redis Pub/Sub
Python
Senior
Без компании
Как гарантировать доставку в Redis Pub/Sub
Ответы
В Redis Pub/Sub нет встроенной гарантии доставки сообщений — это fire-and-forget механизм. Если подписчик оффлайн, сообщения теряются.
**Альтернативы:**
- **Streams** (лучший вариант) — сохраняют сообщения, поддерживают подтверждение (ack) и группы потребителей.
```
# Producer
r = redis.Redis()
r.xadd('mystream', {'data': 'value'})
# Consumer (группа)
r.xgroup_create('mystream', 'mygroup', id='0')
messages = r.xreadgroup('mygroup', 'consumer1', {'mystream': '>'}, count=1)
r.xack('mystream', 'mygroup', message_id) # Подтверждение
```
- **Репликация + RDB/AOF** — для durability, но не гарантирует доставку подписчику.
- **Внешние системы** (Kafka, RabbitMQ) — если нужны строгие гарантии.
**Вывод:** Используйте Redis Streams для persistence и подтверждений.