Переместить данные из потока Redis в хранилище, которого нет в памяти

В документации https://redis.io/topics/streams-intro упоминаются ограниченные потоки для предотвращения перегрузки памяти:

... Иногда полезно иметь максимальное заданное количество элементов внутри потока, в других случаях, когда достигается заданный размер, полезно перемещать данные из Redis в хранилище, которого нет в памяти...

Однако это только объясняет возможности redis по обрезке потока. Мне не удалось найти какой-либо концепции или проверенного способа фактически перенести данные из Redis. Я понимаю, что могу создать потребителя для перемещения всех событий в неограниченное место, но приведенное выше утверждение предполагает, что я должен иметь возможность эффективно перемещать только старые события. Не могли бы вы поделиться идеей решения?

1 ответ

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

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

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

Теперь вам понадобится некоторая политика обрезки, которая бы обрезала коллекцию, самый простой способ - обрезать ее периодически, например, ежедневно, см. Мой другой ответ Как определить TTL для потоков redis?

Другие вопросы по тегам