XTRIM
XTRIM
XTRIM key <MAXLEN | MINID> [= | ~] threshold [LIMIT count]
- Доступно с версии:
- 5.0.0
- Временная сложность:
- O(N), где N — количество удаляемых записей. Однако постоянные времена очень малы, так как записи организованы в макроузлы, содержащие несколько записей, которые могут быть освобождены с помощью одного освобождения памяти.
- Категории ACL:
-
@write,@stream,@slow,
XTRIM обрезает поток, удаляя более старые записи (записи с меньшими идентификаторами), если это необходимо.
Обрезку потока можно выполнить, используя одну из этих стратегий:
-
MAXLEN: Удаляет записи до тех пор, пока длина потока не станет меньше или равна указаннойthreshold, гдеthreshold— положительное целое число. -
MINID: Удаляет записи с идентификаторами меньше, чемthreshold, гдеthreshold— идентификатор потока.
Например, это обрезает поток до ровно последних 1000 элементов:
XTRIM mystream MAXLEN 1000
В то время как в этом примере будут удалены все записи, у которых идентификатор меньше 649085820-0:
XTRIM mystream MINID 649085820
По умолчанию или при использовании необязательного аргумента =, команда выполняет точную обрезку.
В зависимости от стратегии, точная обрезка означает:
-
MAXLEN: длина обрезанного потока будет точно равна минимальному значению между его исходной длиной и указаннымthreshold. -
MINID: самый старый идентификатор в потоке будет точно равен максимальному значению между его исходным самым старым идентификатором и указаннымthreshold.
Практически точная обрезка
Поскольку точная обрезка может потребовать дополнительных усилий от сервера Redis, можно указать необязательный аргумент ~ для повышения эффективности.
Например:
XTRIM mystream MAXLEN ~ 1000
Аргумент ~ между стратегией MAXLEN и threshold означает, что пользователь запрашивает обрезку потока таким образом, чтобы его длина была по крайней мере равна threshold, но, возможно, немного больше. В этом случае Redis прекратит обрезку, когда можно получить прирост производительности (например, когда весь макроузел в структуре данных не может быть удален). Это делает обрезку намного эффективнее, и это обычно то, что вам нужно, хотя после обрезки поток может содержать на несколько десятков дополнительных записей по сравнению с threshold.
Другой способ контролировать объем работы, выполняемой командой при использовании ~, — это фраза LIMIT. При использовании она указывает максимальное количество count удаляемых записей. Если LIMIT и count не указаны, по умолчанию используется значение 100 * количество записей в макроузле, которое будет неявно использоваться как count. Указание значения 0 в качестве count полностью отключает механизм ограничения.
Возвращаемое значение
Целочисленный ответ: Количество удаленных записей из потока.
Примеры
XADD mystream * field1 A field2 B field3 C field4 D XTRIM mystream MAXLEN 2 XRANGE mystream - +
История
- Начиная с версии Redis 6.2.0: Добавлена стратегия обрезки
MINIDи опцияLIMIT.
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/xtrim/