Redis XTRIM

Redis Xtrim



Nizkostopenjski podatki tokov Redis

Tokovi Redis so podatkovna struktura samo za dodajanje, ki zagotavlja nabor zelo učinkovitih operacij branja in vstavljanja s pomnilniško učinkovitim mehanizmom za shranjevanje. Interno tokovi Redis uporabljajo drevesno podatkovno strukturo Radix, ki je prostorsko optimizirano drevo z visoko učinkovitostjo pomnilnika.

Tokovi Redis shranjujejo podatke kot seznam vnosov, kjer je vsak vnos sestavljen iz parov ključ-vrednost. Na nizki ravni so ti vnosi pakirani v makro vozlišča, kot je prikazano v nadaljevanju.









V tem članku se osredotočamo na odstranjevanje vnosov toka z ukazom XTRIM, zgoraj omenjeni koncept pa močno vpliva na učinkovitost operacije odstranjevanja. Običajno je odstranitev vnosa toka Redis zelo učinkovita, če se izvede na ravni makro vozlišča, ne pa tudi na vstopni ravni. Ta mehanizem je implementiran z ukazom XTRIM, o katerem bomo razpravljali v naslednjem razdelku.



Ukaz XTRIM

Ukaz XTRIM se uporablja za prekinitev vnosov toka na podlagi podane vrednosti praga. Prag je lahko največje število vnosov na tok ali ID starejšega vnosa. Ukaz XTRIM sprejme vrsto praga kot argument ukaza. Sintaksa ukaza XTRIM je naslednja.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] mejna_vrednost [ LIMIT število ]

stream_key : Ključ toka Redis.

MAXLEN : največja dolžina toka po obrezovanju vnosov. Odstranjeni bodo vsi vnosi, ki presegajo dolžino toka, ki je določena z vrednostjo praga. Ta argument je pozitivno celo število.

MINID : Najmanjši ID toka, ki naj ostane po obrezovanju vnosov. Odstranjeni bodo vsi vnosi, katerih ID-ji so nižji od določenega praga. Kadarkoli določite ta parameter, prag postane ID toka.

= operater : Ko je določeno, bo izvedeno natančno obrezovanje na podlagi vrednosti praga.

~ operater : Ko je določeno, bo izvedeno skoraj natančno obrezovanje na podlagi vrednosti praga in velikosti makro vozlišča.

mejna_vrednost : Mejna vrednost, ki temelji na argumentu MAXLEN ali MINID.

LIMIT število : največje število vnosov za odstranitev.

Primer uporabe 01 – Odstranjevanje vnosov toka na podlagi največje dolžine

Predpostavimo, da ima turistično podjetje trgovino Redis za spremljanje turističnih informacij. Podatkovna struktura Redis streams je bila uporabljena za shranjevanje informacij vsakega turista kot parov ključ-vrednost. Sčasoma se je tok povečal in načrtujejo, da bodo obdržali le zadnjih 1000 vnosov. Tako so ugotovili, da mora biti največja dolžina toka kadar koli 1000. Za dosego tega je bil uporabljen ukaz XTRIM.

Za namene predstavitve bomo najprej ustvarili tok z 10 vnosi, kot sledi. Za izvedbo vstavljanja je bil uporabljen ukaz XADD.

xadd turistične informacije * ime jack država italija familymems 5
xadd turistične informacije * ime harry država ZDA družinski spomini dva
xadd turistične informacije * ime nikomita država japonska družina mems 3
xadd turistične informacije * ime Zakaria država Indija družinski spomini dva
xadd turistične informacije * ime redmond država brazil družinski spomini 6
xadd turistične informacije * najdeno ime država japonska družinski spomini 3
xadd turistične informacije * ime maryjohn država ZDA družinski spomini dva
xadd turistične informacije * ime liza država italija družinski spomini 5
xadd turistične informacije * ime nimshikaa država japonska družina mems 3
xadd turistične informacije * ime nisha država italija družinski spomini 5

Uporabimo ukaz XRANGE za pregled toka turistične informacije, kot sledi.

xrange turistične informacije - +

Izhod:

Kot je bilo pričakovano, je ta ukaz prikazal 10 vnosov toka.

Za namene predstavitve bomo tok obrezali tam, kjer bi bila njegova največja dolžina 5.

xtrim turistične informacije maxlen 5

Ponovno preglejmo vnose toka z ukazom XRANGE.

Kot je bilo pričakovano, je bilo iz toka izločenih pet vnosov, njegova dolžina pa je 5.

Primer uporabe 02 – Odstranjevanje vnosov tokov na podlagi ID-jev tokov

Vzemimo primer, ko vremenska družba spremlja vremenske informacije za dano lokacijo z uporabo tokov Redis. Zdaj želijo izbrisati starejše vnose, ki niso več potrebni. Ukaz XTRIM lahko uporabimo s strategijo MINID, kot je prikazano v nadaljevanju.

Najprej bomo ustvarili tok z imenom weatherinfo in mu dodali 5 vnosov, kot sledi.

xadd informacije o vremenu * temp 10 vlažnost petdeset
xadd informacije o vremenu * temp dvajset vlažnost 70
xadd informacije o vremenu * temp 12 vlažnost 65
xadd informacije o vremenu * temp petnajst vlažnost 88
xadd informacije o vremenu * temp 18 vlažnost Štiri, pet

Izhod:

Uporabimo ukaz XTRIM, da odstranimo vnose, katerih ID-ji so nižji od podane vrednosti praga.

xtrim vremenske informacije MINID 1660485503248 - 0

Najmanjši navedeni ID je povezan s tretjim vnosom. Zato bodo vnosi za tretjim vnosom, ki imajo nižje ID-je, izbrisani.

Izhod:

Ker nismo izrecno podali argumentov = ali ~, ukaz privzeto uporablja operator =. Zato je bilo natančno obrezovanje opravljeno v obeh primerih uporabe. Če ste izrecno podali operator ~, bo opravljeno skoraj natančno obrezovanje, kot je prikazano v nadaljevanju.

Kot je prikazano na zgornji sliki, je bil ukaz XTRIM uporabljen z operatorjem ~. Od ukaza zahtevamo, da odstrani vse vnose, ki presegajo dolžino 100. Ker ukaza XTRIM ne prisilimo k natančnemu obrezovanju, se bo osredotočil na učinkovitost operacije obrezovanja. Tako ne bo odstranil takojšnjih vnosov, ki pripadajo istemu makro vozlišču. Ohranil bo naslednje tri vnose, ki so v istem makro vozlišču, in odstranil vsa makro vozlišča za temi. Zagotavlja precejšnje izboljšanje zmogljivosti kot pri pristopu natančnega obrezovanja, zaradi katerega mora ukaz vložiti dodaten napor. Enak postopek se izvede, ko prag temelji na ID-jih vnosov.

Argument LIMIT omejuje število izločenih vnosov iz določenega toka, kar lahko uporabite za nekoliko večjo izboljšavo zmogljivosti.

Zaključek

Na kratko, ukaz XTRIM se uporablja za odstranjevanje vnosov toka na podlagi vrednosti praga. Vrsto vrednosti praga je mogoče spremeniti s kontekstom, ki je določen z uporabo argumentov ukaza MAXLEN in MINID. Kot smo že omenili, je obrezovanje mogoče izvesti na dva načina, pri čemer bo operacija obrezovanja upoštevala prag kot natančno ali približno mejo. Ukaz privzeto uporablja operator =, ki se uporablja za natančno obrezovanje. Z operatorjem ~ lahko naredite približno obrezovanje, kot je omenjeno v zgornjem razdelku. Na splošno vam pristop približnega obrezovanja in argument LIMIT pomagata doseči znatno povečanje zmogljivosti z ukazom XTRIM.