Spec-Zone.ru › Redis

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API