Redis XTRIM

Redis Xtrim



Podrobnosti o streamoch Redis na nízkej úrovni

Toky Redis sú dátovou štruktúrou len na pridávanie, ktorá poskytuje súbor vysoko efektívnych operácií čítania a vkladania s pamäťovo efektívnym mechanizmom ukladania. Vnútorne toky Redis používajú štruktúru údajov stromu Radix, čo je strom optimalizovaný pre priestor s vysokou účinnosťou pamäte.

Toky Redis ukladajú údaje ako zoznam položiek, kde každá položka pozostáva z párov kľúč – hodnota. Na nízkej úrovni sú tieto položky zbalené do makro-uzlov, ako je znázornené nižšie.









V tomto článku sa zameriavame na odstránenie záznamov streamu pomocou príkazu XTRIM a vyššie uvedený koncept úzko ovplyvňuje efektivitu operácie odstránenia. Odstránenie vstupu Redis streamu je zvyčajne veľmi efektívne, ak sa to robí na úrovni makro uzla, ale nie na úrovni vstupu. Tento mechanizmus je implementovaný pomocou príkazu XTRIM, o ktorom budeme diskutovať v nasledujúcej časti.



Príkaz XTRIM

Príkaz XTRIM sa používa na odrezanie vstupov toku na základe danej prahovej hodnoty. Prah môže byť maximálny počet záznamov na stream alebo staršie ID záznamu. Príkaz XTRIM akceptuje typ prahu ako argument príkazu. Syntax príkazu XTRIM je nasledovná.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] hraničná hodnota [ LIMIT počet ]

stream_key : Kľúč streamu Redis.

MAXLEN : Maximálna dĺžka prúdu po orezaní záznamov. Všetky položky, ktoré presahujú dĺžku toku, ktorá je určená prahovou hodnotou, budú odstránené. Tento argument je kladné celé číslo.

MINID : Minimálne ID toku, ktoré by malo zostať po orezaní položiek. Všetky položky, ktoré majú ID nižšie ako zadaná prahová hodnota, budú odstránené. Kedykoľvek zadáte tento parameter, prah sa stane ID toku.

= operátor : Ak je špecifikované, presné orezanie sa vykoná na základe prahovej hodnoty.

~ operátor : Ak je špecifikované, vykoná sa takmer presné orezanie na základe prahovej hodnoty a veľkosti makrouzla.

hraničná hodnota : Prahová hodnota založená na argumente MAXLEN alebo MINID.

LIMIT počet : Maximálny počet položiek, ktoré sa majú odstrániť.

Prípad použitia 01 – Odstránenie záznamov toku na základe maximálnej dĺžky

Predpokladajme, že turistická spoločnosť prevádzkuje predajňu Redis, aby mohla sledovať turistické informácie. Dátová štruktúra Redis streams bola použitá na uloženie informácií každého turistu ako párov kľúč – hodnota. Postupom času sa stream rozrástol a plánujú ponechať len posledných 1 000 záznamov. Takže určili, že maximálna dĺžka prúdu by mala byť kedykoľvek 1000. Na dosiahnutie tohto cieľa sa použil príkaz XTRIM.

Pre demonštračné účely najskôr vytvoríme stream s 10 položkami nasledovne. Na vykonanie vloženia bol použitý príkaz XADD.

xadd turistické info * meno jack krajina taliansko rodinní príslušníci 5
xadd turistické info * meno harry country usa rodinní príslušníci dva
xadd turistické info * meno nikomita krajina japonsko familymems 3
xadd turistické info * meno zakaria krajina india rodinní príslušníci dva
xadd turistické info * meno redmond country brazília familymems 6
xadd turistické info * meno nájdené krajiny Japonsko familymems 3
xadd turistické info * meno maryjohn country usa familymems dva
xadd turistické info * meno Liza krajina Taliansko rodinní príslušníci 5
xadd turistické info * meno nimshikaa krajina japonsko familymems 3
xadd turistické info * meno nisha country taliansko rodinní príslušníci 5

Použime príkaz XRANGE na kontrolu streamu turistické informácie nasledovne.

xrange turistické info - +

Výkon:

Ako sa očakávalo, týmto príkazom sa zobrazilo 10 záznamov prúdu.

Pre demonštračné účely budeme orezávať prúd tam, kde by jeho maximálna dĺžka bola 5.

xtrim turistické info maxlen 5

Pozrime sa znova na položky streamu pomocou príkazu XRANGE.

Podľa očakávania bolo zo streamu vyradených päť záznamov a jeho dĺžka je 5.

Prípad použitia 02 – Odstránenie záznamov toku na základe ID toku

Vezmime si príklad, keď meteorologická spoločnosť sleduje informácie o počasí na danom mieste pomocou streamov Redis. Teraz chcú vymazať staršie záznamy, ktoré už nie sú potrebné. Môžeme použiť príkaz XTRIM pomocou stratégie MINID, ako je uvedené nižšie.

Najprv vytvoríme stream s názvom weatherinfo a pridáme doň 5 záznamov nasledovne.

xadd weatherinfo * tepl 10 vlhkosť päťdesiat
xadd weatherinfo * tepl dvadsať vlhkosť 70
xadd weatherinfo * tepl 12 vlhkosť 65
xadd weatherinfo * tepl pätnásť vlhkosť 88
xadd weatherinfo * tepl 18 vlhkosť Štyri, päť

Výkon:

Použime príkaz XTRIM na odstránenie položiek, ktoré majú ID nižšie ako zadaná prahová hodnota.

xtrim weatherinfo MINID 1660485503248 - 0

Zadané minimálne id je spojené s treťou položkou. Preto záznamy po treťom zázname, ktoré majú nižšie ID, budú vymazané.

Výkon:

Keďže sme explicitne nešpecifikovali argumenty = alebo ~, príkaz štandardne používa operátor =. Presné orezanie sa teda vykonalo v oboch prípadoch použitia. Ak ste explicitne zadali operátor ~, vykoná sa takmer presné orezanie, ako je uvedené nižšie.

Ako je znázornené na obrázku vyššie, príkaz XTRIM bol použitý s operátorom ~. Požiadame príkaz, aby odstránil všetky položky, ktoré presahujú dĺžku 100. Keďže príkaz XTRIM nenútime vykonať presné orezanie, zameria sa na efektivitu operácie orezania. Neodstráni teda okamžité položky, ktoré patria rovnakému uzlu makra. Zachová ďalšie tri položky, ktoré sú v rovnakom uzle makra, a odstráni všetky ďalšie uzly makra. Poskytuje značné zlepšenie výkonu ako pri presnom orezávaní, čo núti príkaz vynaložiť ďalšie úsilie. Rovnaký postup sa uskutoční, keď je prah založený na ID vstupu.

Argument LIMIT obmedzuje počet vyradených záznamov zo zadaného streamu, čo možno použiť na zvýšenie výkonu.

Záver

Stručne povedané, príkaz XTRIM sa používa na odstránenie záznamov toku na základe prahovej hodnoty. Typ prahovej hodnoty je možné zmeniť podľa kontextu, ktorý je zadaný pomocou argumentov príkazu MAXLEN a MINID. Ako bolo uvedené, orezanie sa môže uskutočniť dvoma spôsobmi, pričom operácia orezania bude považovať prahovú hodnotu za presnú alebo približnú hranicu. V predvolenom nastavení príkaz používa operátor =, ktorý sa používa na presné orezanie. Pomocou operátora ~ môžete vykonať približné orezanie, ako je uvedené v časti vyššie. Celkovo vám prístup približného orezávania a argument LIMIT pomáhajú dosiahnuť značný nárast výkonu pomocou príkazu XTRIM.