Как предотвратить бесконечное увеличение потоковой памяти Redis?

Я только что понял, что XACK не удаляет сообщение автоматически, когда существует только одна группа потребителей.

Я думал, что когда все группы потребителей получат одно и то же сообщение, сообщение будет удалено Redis-сервером, но казалось, что это не так.

Таким образом, поток памяти Redis увеличивается бесконечно, поскольку никакие сообщения не будут удалены.

Может быть, единственный способ предотвратить это - это сообщение XDEL вручную? Но как я могу узнать, что все группы потребителей приняли сообщение?

Нужна помощь, спасибо!

1 ответ

Потоки Redis в основном представляют собой структуру данных только для добавления. Все сообщения добавляются в поток на неопределенный срок, если пользователь явно не просит их удалить, например, используя XDEL команда:

> XDEL mystream 1538561700640-0
(integer) 1

Также можно ограничить размер потока максимальным количеством сообщений, используя MAXLEN возможность XADD:

> XADD mystream MAXLEN 1000 * value 1
1526654998691-0
...
> XLEN mystream
(integer) 1000

Чтобы просмотреть список ожидающих сообщений для каждой группы потребителей, вы можете использовать XPENDING команда:

> XPENDING mystream mygroup
1) (integer) 1
2) 1526984818136-0
3) 1526984818136-0
4) 1) 1) "consumer-1"
      2) "1"
Другие вопросы по тегам