Redis XTRIM

Redis Xtrim



Mga Detalye ng Mababang Antas ng Redis Stream

Ang mga stream ng Redis ay isang append-only na istraktura ng data na nagbibigay ng isang hanay ng napakahusay na read at insert na mga operasyon na may mekanismo ng storage na mahusay sa memorya. Sa panloob, ang Redis stream ay gumagamit ng isang Radix tree data structure na isang space-optimized na puno na may mataas na kahusayan sa memorya.

Ang mga stream ng Redis ay nag-iimbak ng data bilang isang listahan ng mga entry kung saan ang bawat entry ay binubuo ng mga pares ng key-value. Sa mababang antas, ang mga entry na ito ay naka-pack sa mga macro-node, tulad ng ipinapakita sa sumusunod.









Sa artikulong ito, kami ay tumutuon sa pag-alis ng mga stream entries gamit ang XTRIM command, at ang nabanggit na konsepto ay malapit na nakakaapekto sa kahusayan ng pagpapatakbo ng pag-alis. Karaniwan, ang pag-alis ng entry ng Redis stream ay napakahusay kung gagawin ito sa antas ng macro-node ngunit hindi sa antas ng pagpasok. Ang mekanismong ito ay ipinatupad sa utos ng XTRIM na tatalakayin natin sa susunod na seksyon.



Ang XTRIM Command

Ang utos ng XTRIM ay ginagamit upang putulin ang mga entry ng isang stream batay sa isang ibinigay na halaga ng threshold. Ang threshold ay maaaring isang maximum na bilang ng mga entry sa bawat stream o isang mas lumang entry id. Ang XTRIM command ay tumatanggap ng uri ng threshold bilang command argument. Ang syntax ng XTRIM command ay ang mga sumusunod.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] threshold_value [ LIMIT bilang ]

stream_key : Ang susi ng Redis stream.

MAXLEN : Ang maximum na haba ng stream pagkatapos ng pag-trim ng mga entry. Ang lahat ng mga entry ay aalisin na lumampas sa haba ng stream, na tinukoy ng halaga ng threshold. Ang argumentong ito ay isang positibong integer.

MINID : Ang pinakamababang stream id na dapat manatili pagkatapos i-trim ang mga entry. Aalisin ang lahat ng mga entry na may mga ID na mas mababa kaysa sa tinukoy na threshold. Sa tuwing tutukuyin mo ang parameter na ito, nagiging stream ID ang threshold.

= operator : Kapag tinukoy, ang eksaktong trimming ay isasagawa batay sa halaga ng threshold.

~ operator : Kapag tinukoy, halos eksaktong trimming ang isasagawa batay sa halaga ng threshold at laki ng macro-node.

threshold_value : Ang halaga ng threshold batay sa argument na MAXLEN o MINID.

LIMIT bilang : Ang maximum na bilang ng mga entry na aalisin.

Gamitin ang Case 01 – Pag-alis ng Mga Stream Entries Batay sa Pinakamataas na Haba

Ipagpalagay natin na ang isang kumpanya ng turismo ay nagpapanatili ng isang tindahan ng Redis upang masubaybayan ang impormasyon ng turista. Ang istraktura ng data ng mga stream ng Redis ay ginamit upang iimbak ang impormasyon ng bawat turista bilang mga pares ng key-value. Sa paglipas ng panahon, lumaki ang stream, at pinaplano nilang panatilihin lamang ang pinakabagong 1000 entry. Kaya natukoy nila ang maximum na haba ng stream ay dapat na 1000 anumang oras. Ang utos ng XTRIM ay ginamit upang makamit ito.

Para sa mga layunin ng pagpapakita, una, gagawa kami ng isang stream na may 10 mga entry tulad ng sumusunod. Ang XADD command ay ginamit upang maisagawa ang pagpasok.

xadd touristinfo * pangalan jack country italy familymems 5
xadd touristinfo * name harry country usa familymems dalawa
xadd touristinfo * name nikomita country japan familymems 3
xadd touristinfo * pangalan zakaria bansa india familymems dalawa
xadd touristinfo * pangalan redmond bansa brazil familymems 6
xadd touristinfo * name nakita country japan familymems 3
xadd touristinfo * name maryjohn country usa familymems dalawa
xadd touristinfo * name liza country italy familymems 5
xadd touristinfo * name nimshikaa country japan familymems 3
xadd touristinfo * name nisha country italy familymems 5

Gamitin natin ang XRANGE command para siyasatin ang stream touristinfo gaya ng mga sumusunod.

xrange touristinfo - +

Output:

Gaya ng inaasahan, ang 10 stream entry ay ipinakita ng command na ito.

Para sa mga layunin ng pagpapakita, kami ay magpapagupit ng stream kung saan ang maximum na haba nito ay magiging 5.

xtrim touristinfo maxlen 5

Suriin nating muli ang mga stream entry gamit ang XRANGE command.

Gaya ng inaasahan, limang entry ang pinaalis sa batis, at ang haba nito ay 5.

Gamitin ang Case 02 – Pag-alis ng Mga Stream Entries Batay sa Mga Stream ID

Kumuha tayo ng isang halimbawa kung saan sinusubaybayan ng isang kumpanya ng panahon ang impormasyon ng lagay ng panahon ng isang partikular na lokasyon gamit ang mga stream ng Redis. Ngayon, gusto nilang tanggalin ang mga mas lumang entry na hindi na kailangan. Magagamit natin ang XTRIM command gamit ang MINID na diskarte, tulad ng ipinapakita sa sumusunod.

Una, gagawa kami ng stream na tinatawag na weatherinfo at magdagdag ng 5 entry dito bilang mga sumusunod.

xadd weatherinfo * temp 10 kahalumigmigan limampu
xadd weatherinfo * temp dalawampu kahalumigmigan 70
xadd weatherinfo * temp 12 kahalumigmigan 65
xadd weatherinfo * temp labinlima kahalumigmigan 88
xadd weatherinfo * temp 18 kahalumigmigan Apat. Lima

Output:

Gamitin natin ang XTRIM command para alisin ang mga entry na may mga ID na mas mababa kaysa sa tinukoy na halaga ng threshold.

xtrim weatherinfo MINID 1660485503248 - 0

Ang minimum na id na tinukoy ay nauugnay sa ikatlong entry. Kaya, ang mga entry pagkatapos ng ikatlong entry na may mas mababang mga id ay tatanggalin.

Output:

Dahil hindi namin tinukoy ang = o ~ na mga argumento nang tahasan, ginagamit ng command ang = operator bilang default. Samakatuwid, ang eksaktong trimming ay ginawa sa parehong mga kaso ng paggamit. Kung tahasan mong tinukoy ang ~ operator, halos eksaktong trimming ang gagawin, tulad ng ipinapakita sa sumusunod.

Tulad ng ipinapakita sa figure sa itaas, ang XTRIM command ay ginamit sa ~ operator. Hinihiling namin sa command na tanggalin ang lahat ng mga entry na lampas sa haba ng 100. Dahil hindi namin pinipilit ang XTRIM command na gumawa ng eksaktong trimming, ito ay tumutuon sa kahusayan ng trimming operation. Kaya, hindi nito aalisin ang mga agarang entry na kabilang sa parehong macro-node. Pananatilihin nito ang susunod na tatlong entry na nasa parehong macro-node at aalisin ang lahat ng macro-node pagkatapos ng mga iyon. Nagbibigay ito ng malaking halaga ng pagpapabuti ng pagganap kaysa sa eksaktong paraan ng pagbabawas, na pinipilit ang utos na maglagay ng labis na pagsisikap. Ang parehong pamamaraan ay nagaganap kapag ang threshold ay batay sa mga entry id.

Nililimitahan ng argumentong LIMIT ang bilang ng mga pinaalis na mga entry mula sa tinukoy na stream, na maaaring magamit upang makakuha ng kaunting pagpapabuti sa pagganap.

Konklusyon

Sa madaling salita, ginagamit ang utos ng XTRIM upang alisin ang mga entry ng stream batay sa isang halaga ng threshold. Ang uri ng halaga ng threshold ay maaaring baguhin gamit ang konteksto na tinutukoy gamit ang MAXLEN at MINID command arguments. Gaya ng napag-usapan, maaaring gawin ang trimming sa dalawang paraan kung saan isasaalang-alang ng trimming operation ang threshold bilang eksaktong o tinatayang limitasyon. Bilang default, ginagamit ng command ang = operator na ginagamit para sa eksaktong trimming. Gamit ang ~ operator, maaari kang gumawa ng tinatayang trimming tulad ng nabanggit sa seksyon sa itaas. Sa pangkalahatan, ang tinatayang trimming approach at ang LIMIT argument ay nakakatulong sa iyo na makakuha ng malaking performance gain sa XTRIM command.