Redis XTRIM

Redis Xtrim



Podrobnosti o nízkoúrovňových streamech Redis

Toky Redis jsou datová struktura pouze pro připojení, která poskytuje sadu vysoce efektivních operací čtení a vkládání s paměťově efektivním mechanismem ukládání. Interně streamy Redis používají datovou strukturu Radix tree, což je prostorově optimalizovaný strom s vysokou efektivitou paměti.

Toky Redis ukládají data jako seznam položek, kde každá položka obsahuje páry klíč-hodnota. Na nízké úrovni jsou tyto položky zabaleny do uzlů maker, jak je znázorněno níže.









V tomto článku se zaměřujeme na odstranění záznamů proudu pomocí příkazu XTRIM a výše zmíněný koncept úzce ovlivňuje efektivitu operace odstranění. Odstranění záznamu streamu Redis je obvykle velmi efektivní, pokud se provádí na úrovni makrouzlů, ale ne na úrovni vstupu. Tento mechanismus je implementován pomocí příkazu XTRIM, o kterém budeme diskutovat v následující části.



Příkaz XTRIM

Příkaz XTRIM se používá k oříznutí vstupů toku na základě dané prahové hodnoty. Prahová hodnota může být maximální počet položek na stream nebo starší ID položky. Příkaz XTRIM přijímá typ prahu jako argument příkazu. Syntaxe příkazu XTRIM je následující.





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

stream_key : Klíč streamu Redis.

MAXLEN : Maximální délka proudu po oříznutí položek. Všechny položky, které přesahují délku streamu, která je určena prahovou hodnotou, budou odstraněny. Tento argument je kladné celé číslo.

MINID : Minimální ID streamu, které by mělo zůstat po oříznutí položek. Všechny položky, které mají ID nižší než zadaná prahová hodnota, budou odstraněny. Kdykoli zadáte tento parametr, prahová hodnota se stane ID toku.

= operátor : Je-li specifikováno, přesné oříznutí bude provedeno na základě prahové hodnoty.

~ operátor : Je-li specifikováno, bude provedeno téměř přesné oříznutí na základě prahové hodnoty a velikosti makrouzlu.

prahová hodnota : Prahová hodnota založená na argumentu MAXLEN nebo MINID.

LIMIT počet : Maximální počet položek, které mají být odstraněny.

Případ použití 01 – Odstranění záznamů toku na základě maximální délky

Předpokládejme, že turistická společnost provozuje obchod Redis, aby mohla sledovat turistické informace. Datová struktura Redis streams byla použita k uložení informací každého turisty jako párů klíč-hodnota. Postupem času se stream rozrostl a plánují ponechat pouze posledních 1000 záznamů. Zjistili tedy, že maximální délka proudu by měla být kdykoli 1000. K tomu byl použit příkaz XTRIM.

Pro demonstrační účely nejprve vytvoříme stream s 10 položkami následovně. K provedení vložení byl použit příkaz XADD.

xadd turistické informace * jméno jack země itálie rodinní příslušníci 5
xadd turistické informace * jméno harry country usa rodinní příslušníci dva
xadd turistické informace * jméno nikomita země japonsko familymems 3
xadd turistické informace * jméno zakaria země indie rodinní příslušníci dva
xadd turistické informace * jméno redmond země brazílie familymems 6
xadd turistické informace * nalezené jméno země japonsko familymems 3
xadd turistické informace * jméno maryjohn country usa familymems dva
xadd turistické informace * jméno liza země itálie rodinní příslušníci 5
xadd turistické informace * jméno nimshikaa země japonsko familymems 3
xadd turistické informace * jméno nisha země itálie rodinní příslušníci 5

Použijme příkaz XRANGE ke kontrole streamu turistické informace následovně.

xrange turistické info - +

Výstup:

Podle očekávání bylo tímto příkazem zobrazeno 10 záznamů proudu.

Pro demonstrační účely ořízneme proud tam, kde by jeho maximální délka byla 5.

xtrim turistické info maxlen 5

Pojďme znovu zkontrolovat položky streamu pomocí příkazu XRANGE.

Podle očekávání bylo ze streamu vyřazeno pět záznamů a jeho délka je 5.

Případ použití 02 – Odstranění záznamů toku na základě ID toku

Vezměme si příklad, kdy meteorologická společnost sleduje informace o počasí v daném místě pomocí streamů Redis. Nyní chtějí odstranit starší záznamy, které již nejsou potřeba. Můžeme použít příkaz XTRIM pomocí strategie MINID, jak je znázorněno níže.

Nejprve vytvoříme stream s názvem weatherinfo a přidáme do něj 5 záznamů následovně.

x přidat informace o počasí * tepl 10 vlhkost vzduchu padesáti
x přidat informace o počasí * tepl dvacet vlhkost vzduchu 70
x přidat informace o počasí * tepl 12 vlhkost vzduchu 65
x přidat informace o počasí * tepl patnáct vlhkost vzduchu 88
x přidat informace o počasí * tepl 18 vlhkost vzduchu Čtyři pět

Výstup:

Použijme příkaz XTRIM k odstranění položek, které mají ID nižší než zadaná prahová hodnota.

xtrim weatherinfo MINID 1660485503248 - 0

Zadané minimální id je spojeno s třetím záznamem. Proto budou vymazány záznamy za třetím záznamem, které mají nižší ID.

Výstup:

Protože jsme explicitně nezadali argumenty = nebo ~, používá příkaz ve výchozím nastavení operátor =. V obou případech použití tedy bylo provedeno přesné oříznutí. Pokud jste operátor ~ zadali explicitně, provede se téměř přesné oříznutí, jak je znázorněno níže.

Jak je znázorněno na obrázku výše, příkaz XTRIM byl použit s operátorem ~. Požádáme příkaz, aby odstranil všechny položky, které přesahují délku 100. Protože nenutíme příkaz XTRIM provést přesné oříznutí, zaměří se na efektivitu operace oříznutí. Neodstraní tedy okamžité položky, které patří ke stejnému uzlu makra. Zachová další tři položky, které jsou ve stejném uzlu makra, a odstraní všechny další uzly makra. Poskytuje značné zlepšení výkonu než v přístupu přesného ořezávání, což nutí příkaz vynaložit další úsilí. Stejný postup probíhá, když je prahová hodnota založena na ID položky.

Argument LIMIT omezuje počet vyřazených položek ze zadaného streamu, což lze použít k dosažení ještě většího zlepšení výkonu.

Závěr

Stručně řečeno, příkaz XTRIM se používá k odstranění položek toku na základě prahové hodnoty. Typ prahové hodnoty lze změnit podle kontextu, který je zadán pomocí argumentů příkazu MAXLEN a MINID. Jak bylo uvedeno, oříznutí lze provést dvěma způsoby, kdy operace oříznutí bude považovat práh za přesný nebo přibližný limit. Ve výchozím nastavení příkaz používá operátor =, který se používá pro přesné oříznutí. Pomocí operátoru ~ můžete provést přibližné oříznutí, jak je uvedeno ve výše uvedené části. Celkově vám přístup přibližného ořezávání a argument LIMIT pomáhají dosáhnout značného zvýšení výkonu pomocí příkazu XTRIM.