Redis 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 е използвана за извършване на вмъкването.

xadd туристическа информация * име джак държава италия семейни спомени 5
xadd туристическа информация * име Хари държава САЩ семейни спомени две
xadd туристическа информация * име nikomita държава япония семейни спомени 3
xadd туристическа информация * име закария държава индия семейни спомени две
xadd туристическа информация * име редмънд държава бразилия фамилни спомени 6
xadd туристическа информация * име намерено държава япония семейни спомени 3
xadd туристическа информация * име Мериджон държава САЩ семейни спомени две
xadd туристическа информация * име лиза държава италия семейни спомени 5
xadd туристическа информация * име nimshikaa държава япония семейство mems 3
xadd туристическа информация * име ниша държава италия фамилни спомени 5

Нека използваме командата XRANGE, за да проверим потока туристическа информация, както следва.

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

Изход:

Както се очакваше, 10-те записа на потока бяха показани от тази команда.

За демонстрационни цели ще изрежем потока, където максималната му дължина ще бъде 5.

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

Нека отново проверим записите в потока с командата XRANGE.

Както се очакваше, пет записа бяха изгонени от потока, а дължината му е 5.

Случай на използване 02 – Премахване на записи в поток въз основа на идентификатори на поток

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

Първо, ще създадем поток, наречен weatherinfo, и ще добавим 5 записа към него, както следва.

xadd информация за времето * темп 10 влажност петдесет
xadd информация за времето * темп двадесет влажност 70
xadd информация за времето * темп 12 влажност 65
xadd информация за времето * темп петнадесет влажност 88
xadd информация за времето * темп 18 влажност Четири пет

Изход:

Нека използваме командата XTRIM, за да премахнем записите, които имат идентификатори, по-ниски от определената прагова стойност.

xtrim информация за времето MINID 1660485503248 - 0

Посоченият минимален идентификатор е свързан с третия запис. Следователно, записите след третия запис, които имат по-ниски идентификатори, ще бъдат изтрити.

Изход:

Тъй като не сме посочили изрично аргументите = или ~, командата използва оператора = по подразбиране. Следователно, точното подрязване е извършено и в двата случая на употреба. Ако сте посочили изрично оператора ~, ще бъде направено почти точно изрязване, както е показано по-долу.

Както е показано на фигурата по-горе, командата XTRIM е използвана с оператора ~. Молим командата да премахне всички записи, които надвишават дължината от 100. Тъй като не принуждаваме командата XTRIM да извършва точно изрязване, тя ще се фокусира върху ефективността на операцията по изрязване. Така че няма да премахне незабавните записи, които принадлежат към същия макро възел. Той ще запази следващите три записа, които са в същия макро възел и ще премахне всички макро възли след тях. Това дава значително подобрение на производителността в сравнение с подхода за точно изрязване, което принуждава командата да полага допълнителни усилия. Същата процедура се извършва, когато прагът се основава на идентификаторите на входа.

Аргументът LIMIT ограничава броя на изгонените записи от посочения поток, което може да се използва за по-голямо подобрение на производителността.

Заключение

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