Редис XTRIM

Redis Xtrim



Низкоуровневые сведения о потоках Redis

Потоки Redis — это структура данных только для добавления, которая обеспечивает набор высокоэффективных операций чтения и вставки с механизмом хранения с эффективным использованием памяти. Внутри потоки Redis используют структуру данных дерева Radix, которая представляет собой оптимизированное по пространству дерево с высокой эффективностью использования памяти.

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









В этой статье мы сосредоточимся на удалении записей потока с помощью команды XTRIM, и вышеупомянутая концепция тесно влияет на эффективность операции удаления. Обычно удаление записи потока Redis очень эффективно, если оно выполняется на уровне макроузла, а не на уровне входа. Этот механизм реализован с помощью команды XTRIM, которую мы обсудим в следующем разделе.



Команда XTRIM

Команда XTRIM используется для отключения записей потока на основе заданного порогового значения. Порог может быть максимальным количеством записей в потоке или старым идентификатором записи. Команда XTRIM принимает тип порога в качестве аргумента команды. Синтаксис команды XTRIM следующий.





XTRIM stream_key MAXLEN | МИНИД [ знак равно | ~ ] пороговое значение [ ОГРАНИЧИТЬ количество ]

stream_key : ключ потока Redis.

МАКСЛЕН : максимальная длина потока после обрезки записей. Будут удалены все записи, превышающие длину потока, заданную пороговым значением. Этот аргумент является положительным целым числом.

МИНИД : минимальный идентификатор потока, который должен остаться после обрезки записей. Будут удалены все записи с идентификаторами ниже указанного порога. Всякий раз, когда вы указываете этот параметр, пороговое значение становится идентификатором потока.

= оператор : если указано, будет выполняться точная обрезка на основе порогового значения.

~ оператор : если указано, будет выполняться почти точная обрезка на основе порогового значения и размера макроузла.

пороговое значение : пороговое значение на основе аргумента MAXLEN или MINID.

ОГРАНИЧИТЬ количество : Максимальное количество удаляемых записей.

Вариант использования 01 — удаление записей потока на основе максимальной длины

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

Для демонстрационных целей сначала мы создадим поток с 10 записями следующим образом. Для выполнения вставки использовалась команда XADD.

xдобавить туристическую информацию * имя джек кантри италия семьямемс 5
xдобавить туристическую информацию * имя гарри кантри сша семьямемс два
xдобавить туристическую информацию * имя никомита страна япония семьямемс 3
xдобавить туристическую информацию * имя закария страна индия семьямемс два
xдобавить туристическую информацию * имя редмонд страна бразилия семьямемс 6
xдобавить туристическую информацию * имя найдено страна япония семьямемс 3
xдобавить туристическую информацию * имя мэриджон страна сша семьямемс два
xдобавить туристическую информацию * имя лиза страна италия семьямемс 5
xдобавить туристическую информацию * имя нимшикаа страна япония семьямемс 3
xдобавить туристическую информацию * имя ниша страна италия семьямемс 5

Давайте используем команду XRANGE для проверки туристической информации потока следующим образом.

xrange туристическая информация - +

Выход:

Как и ожидалось, эта команда отобразила 10 записей потоков.

В демонстрационных целях мы обрежем поток так, чтобы его максимальная длина равнялась 5.

xtrim туристическая информация макслен 5

Давайте снова проверим записи потока с помощью команды XRANGE.

Как и ожидалось, пять записей были исключены из потока, а его длина равна 5.

Вариант использования 02 — удаление записей потоков на основе идентификаторов потоков

Давайте возьмем пример, когда погодная компания отслеживает информацию о погоде в заданном месте, используя потоки Redis. Теперь они хотят удалить старые записи, которые больше не нужны. Мы можем использовать команду XTRIM, используя стратегию MINID, как показано ниже.

Во-первых, мы создадим поток под названием WeatherInfo и добавим в него 5 записей следующим образом.

xдобавить информацию о погоде * температура 10 влажность 50
xдобавить информацию о погоде * температура 20 влажность 70
xдобавить информацию о погоде * температура 12 влажность 65
xдобавить информацию о погоде * температура пятнадцать влажность 88
xдобавить информацию о погоде * температура 18 влажность Четыре пять

Выход:

Давайте воспользуемся командой XTRIM, чтобы удалить записи с идентификаторами ниже указанного порогового значения.

xtrim погодаинформация MINID 1660485503248 - 0

Указанный минимальный идентификатор связан с третьей записью. Следовательно, записи после третьей записи с более низкими идентификаторами будут удалены.

Выход:

Поскольку мы не указали аргументы = или ~ явно, команда по умолчанию использует оператор =. Следовательно, точная обрезка была выполнена в обоих случаях использования. Если вы явно указали оператор ~, будет выполнена почти точная обрезка, как показано ниже.

Как показано на рисунке выше, команда XTRIM использовалась с оператором ~. Мы просим команду удалить все записи, длина которых превышает 100. Поскольку мы не заставляем команду XTRIM выполнять точную обрезку, она сосредоточится на эффективности операции обрезки. Таким образом, он не удалит непосредственные записи, принадлежащие одному и тому же макроузлу. Он сохранит следующие три записи, которые находятся в одном и том же макроузле, и удалит все макроузлы после них. Это дает значительное улучшение производительности по сравнению с методом точной обрезки, который заставляет команду прилагать дополнительные усилия. Та же процедура происходит, когда порог основан на идентификаторах записей.

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

Вывод

Короче говоря, команда XTRIM используется для удаления записей потока на основе порогового значения. Тип порогового значения можно изменить в контексте, который задается с помощью аргументов команды MAXLEN и MINID. Как обсуждалось, обрезка может быть выполнена двумя способами, когда операция обрезки будет рассматривать порог как точный или приблизительный предел. По умолчанию команда использует оператор =, который используется для точной обрезки. С помощью оператора ~ вы можете выполнить приблизительную обрезку, как указано в предыдущем разделе. В целом, приближенный подход к обрезке и аргумент LIMIT помогают значительно повысить производительность с помощью команды XTRIM.