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