Как предотвратить бесконечное увеличение потоковой памяти 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"