Нет прямого способа удалить старые записи на основе TTL / возраста. Вы можете использовать комбинацию XTRIM/XDEL
с другими командами для обрезки потока.
Посмотрим, как можно использовать XTRIM
Поток XTRIM MAXLEN ~ SIZE
XTRIM обрезает поток до заданного количества элементов, при необходимости удаляя старые элементы (элементы с более низкими идентификаторами).
Вы генерируете размер потока каждый день или периодически в зависимости от вашей политики удаления и сохраняете его где-нибудь с помощью команды XLEN
Запустите периодическое задание, которое будет вызывать XTRIM как
XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)
Например, вчера размер потока был 500, теперь он 600, тогда нам нужно удалить 500 записей, чтобы мы могли просто запустить
XTRIM x-stream MAXLEN ~ 100
Вы можете использовать разные политики для удаления, например, ежедневно, еженедельно, дважды в неделю и т. Д.
ID потока XDEL [ID ...]
Удаляет указанные записи из потока и возвращает количество удаленных записей, которое может отличаться от количества идентификаторов, переданных команде, если определенные идентификаторы не существуют.
Итак, что вы можете сделать, так это всякий раз, когда служба B использует событие, тогда сама служба может удалить запись потока, поскольку служба B знает идентификатор потока, но это не сработает, как только вы начнете использовать группу потребителей. Поэтому я бы сказал, что используйте набор Redis или карту Redis для отслеживания идентификаторов потоков подтверждения и запускайте задание периодической очистки для очистки потока.
Например
Служба A отправляет элемент потока с ID1 службе B Служба B подтверждает элемент потока после использования элементов на карте ack_stream = {ID1: true}, вы можете отслеживать другие данные, например считать в случае группы потребителей.
Задание очистки будет запускаться с периодичностью, например, ежедневно, например, в час ночи, которое считывает все элементы ack_stream и отфильтровывает все элементы, требующие удаления. Теперь вы можете вызывать XDEL
команд в пакетном режиме с набором идентификаторов потоков.
person
sonus21
schedule
05.08.2020