I-Redis Stream-ukuthembeka kunye nokunciphisa iinkqubo zakho zokuthumela imiyalezo

I-Redis Stream-ukuthembeka kunye nokunciphisa iinkqubo zakho zokuthumela imiyalezo

I-Redis Stream luhlobo olutsha lwedatha engabonakaliyo yaziswa kwiRedis ngenguqulo 5.0
Ngokwengqiqo, iRedis Stream luLuhlu onokulongeza kulo amangeno. Ingeno ngalinye linesazisi esisodwa. Ngokungagqibekanga, i-ID yenziwa ngokuzenzekelayo kwaye ibandakanya isitampu sexesha. Ke ngoko, unokubuza uluhlu lweerekhodi ngokuhamba kwexesha, okanye ufumane idatha entsha njengoko ifika kumjelo, kufana nomyalelo we-Unix "umsila -f" ufunda ifayile yelog kwaye ufrize ngelixa ulinde idatha entsha. Qaphela ukuba abathengi abaninzi banokumamela intambo ngexesha elinye, njengoko uninzi lweenkqubo ze "tail -f" zinokufunda ifayile ngaxeshanye ngaphandle kokungqubana.

Ukuqonda zonke izibonelelo zohlobo olutsha lwedatha, makhe sijonge ngokukhawuleza kwizakhiwo zeRedis esele zikho eziphindaphinda ngokuyinxenye ukusebenza kweRedis Stream.

Redis PUB/SUB

IRedis Pub/Sub yinkqubo yokuthumela imiyalezo elula esele yakhelwe kwivenkile yakho engundoqo-ixabiso. Nangona kunjalo, ukulula kuza ngexabiso:

  • Ukuba umvakalisi ngenxa yesizathu esithile uyasilela, ngoko ulahlekelwa ngabo bonke ababhalisi bakhe
  • Umshicileli kufuneka azi idilesi echanekileyo yabo bonke ababhalisi bayo
  • Umshicileli unokulayisha ngaphezulu ababhalisi bakhe ngomsebenzi ukuba idatha ipapashwe ngokukhawuleza kunokuba iqhutywe
  • Umyalezo uyacinywa kwi-buffer yomshicileli ngoko nangoko emva kokupapashwa, nokuba bangaphi ababhalisi othunyelwe kubo kwaye bakhawuleze kangakanani ukwenza lo myalezo.
  • Bonke ababhalisi baya kufumana umyalezo ngexesha elinye. Ababhalisi ngokwabo kufuneka ngandlela ithile bavumelane phakathi kwabo ngomyalelo wokusetyenzwa komyalezo ofanayo.
  • Akukho ndlela eyakhelwe-ngaphakathi yokuqinisekisa ukuba umrhumi usebenze ngempumelelo umyalezo. Ukuba umrhumi ufumana umyalezo kunye nokuphahlazeka ngexesha lokucubungula, umshicileli akayi kukwazi ngayo.

Uluhlu lweRedis

Uluhlu lweRedis luluhlu lwedatha oluxhasa ukuvalela imiyalelo yokufunda. Unokongeza kwaye ufunde imiyalezo ukusuka ekuqaleni okanye ekupheleni koluhlu. Ngokusekwe kolu lwakhiwo, unokwenza isitaki esilungileyo okanye umgca wendlela yakho esasaziweyo, kwaye kwiimeko ezininzi oku kuya kwanela. Umahluko ophambili kwiRedis Pub/Sub:

  • Umyalezo uthunyelwa kumxhasi omnye. Umthengi wokuqala ovaliweyo wokufunda uya kufumana idatha kuqala.
  • UClint kufuneka aqalise umsebenzi wokufunda womyalezo ngamnye ngokwakhe. Uluhlu alwazi nto malunga nabathengi.
  • Imiyalezo igcinwa de umntu ayifunde okanye ayicime ngokucacileyo. Ukuba uqwalasela iseva yeRedis ukugungxula idatha kwidiski, ngoko ukuthembeka kwenkqubo kwandisa kakhulu.

Intshayelelo yokusasaza

Yongeza ingeniso kumsinga

Iqela XADD yongeza ungeno olutsha kumsinga. Irekhodi ayikho nje intambo, iqulethe enye okanye ngaphezulu kwexabiso eliphambili. Ngaloo ndlela, ungeno ngalunye sele lucwangcisiwe kwaye lufana nesakhiwo sefayile ye-CSV.

> XADD mystream * sensor-id 1234 temperature 19.8
1518951480106-0

Kulo mzekelo ungasentla, songeza iindawo ezimbini kumjelo kunye negama (isitshixo) "mystream": "sensor-id" kunye "nobushushu" kunye namaxabiso "1234" kunye "19.8", ngokulandelanayo. Njengengxoxo yesibini, umyalelo uthatha isazisi esiya kwabelwa kwingeniso - esi sichongi sichonga ungeno ngalunye kumsinga. Nangona kunjalo, kule meko siphumelele * kuba sifuna iRedis isivelisele isazisi esitsha. Isazisi esitsha ngasinye siya kwanda. Ke ngoko, ungeno olutsha ngalunye luya kuba nesichongi esiphezulu ngokumalunga namangeno angaphambili.

Ifomathi yesazisi

I-ID yokungena ibuyiselwe ngumyalelo XADD, inamacandelo amabini:

{millisecondsTime}-{sequenceNumber}

millisecondTime β€” Ixesha le-Unix kwii-milliseconds (ixesha leseva yeRedis). Nangona kunjalo, ukuba ixesha langoku liyafana okanye lingaphantsi kwexesha lokurekhoda kwangaphambili, ngoko i-timestamp yokurekhoda kwangaphambili isetyenziswa. Ngoko ke, ukuba ixesha lomncedisi libuyela emva ngexesha, isichongi esitsha siseza kugcina ipropati yokwandisa.

inombolo yolandelelwano isetyenziselwa iirekhodi ezenziwe kwimillisecond efanayo. inombolo yolandelelwano iya kwandiswa ngo-1 xa kuthelekiswa nokungeniswa kwangaphambili. Ngenxa yokuba inombolo yolandelelwano ngamasuntswana angama-64 ngokobungakanani, ngoko xa kusenziwa akufuneki ubaleke kumda wenani leerekhodi ezinokuveliswa ngaphakathi kwemillisecond enye.

Ubume bezo zichongi zisenokubonakala zingaqhelekanga ekuqaleni. Umfundi ongathembiyo unokuzibuza ukuba kutheni ixesha liyinxalenye yesazisi. Isizathu kukuba iRedis imisinga yenkxaso yoluhlu lwemibuzo nge-ID. Ekubeni isichongi sinxulunyaniswa nexesha lokudalwa kwerekhodi, oku kwenza kube lula ukubuza uluhlu lwamaxesha. Siza kujonga umzekelo othile xa sijonga umyalelo XRANGE.

Ukuba ngesizathu esithile umsebenzisi ufuna ukukhankanya esakhe isazisi, esithi, umzekelo, sidityaniswe nenkqubo ethile yangaphandle, ngoko sinokuyidlulisela kumyalelo. XADD endaweni * njengoko kubonisiwe ngezantsi:

> XADD somestream 0-1 field value
0-1
> XADD somestream 0-2 foo bar
0-2

Nceda uqaphele ukuba kule meko kufuneka ubeke iliso kwi-ID yokwandisa ngokwakho. Kumzekelo wethu, esona sichongi sincinci ngu "0-1", ngoko ke umyalelo awuyi kwamkela esinye isichongi esilingana okanye ngaphantsi kuka "0-1".

> XADD somestream 0-1 foo bar
(error) ERR The ID specified in XADD is equal or smaller than the target stream top item

Inani leerekhodi ngomsinga ngamnye

Kuyenzeka ukuba ufumane inani leerekhodi kumlambo ngokulula ngokusebenzisa umyalelo XLEN. Umzekelo wethu, lo myalelo uya kubuyisela ixabiso elilandelayo:

> XLEN somestream
(integer) 2

Uluhlu lwemibuzo - XRANGE kunye ne-XREVRANGE

Ukucela idatha ngoluhlu, kufuneka sicacise izihlonzi ezimbini - isiqalo kunye nokuphela koluhlu. Uluhlu olubuyisiweyo luya kubandakanya zonke izinto, kuquka imida. Kukwakho nezifanisi ezibini ezikhethekileyo "-" kunye "+", ngokulandelelana okuthetha eyona incinci (irekhodi yokuqala) kunye neyona inkulu (irekhodi yokugqibela) isazisi kumsinga. Umzekelo ongezantsi uya kudwelisa onke amangeno omlambo.

> XRANGE mystream - +
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"
2) 1) 1518951482479-0
   2) 1) "sensor-id"
      2) "9999"
      3) "temperature"
      4) "18.2"

Irekhodi nganye ebuyisiweyo luluhlu lwezinto ezimbini: isichongi kunye noluhlu lwexabiso eliphambili. Sele sitshilo ukuba izichongi zerekhodi zinxulumene nexesha. Ke ngoko, sinokucela uluhlu lwexesha elithile. Nangona kunjalo, singakhankanya kwisicelo hayi isichongi esipheleleyo, kodwa kuphela ixesha le Unix, ukushiya indawo enxulumene inombolo yolandelelwano. Indawo eshiyiweyo yesazisi iya kumiselwa ngokuzenzekelayo ibero ekuqaleni koluhlu kunye nelona xabiso liphezulu linokwenzeka ekupheleni koluhlu. Apha ngezantsi kukho umzekelo wendlela onokucela ngayo uluhlu lweemillisecond ezimbini.

> XRANGE mystream 1518951480106 1518951480107
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"

Sinongeno olunye kuphela kolu luhlu, nangona kunjalo kwiiseti zedatha yokwenyani isiphumo esibuyisiweyo singaba sikhulu. Ngesi sizathu XRANGE ixhasa COUNT ukhetho. Ngokuchaza ubungakanani, sinokufumana ngokulula iirekhodi ze-N zokuqala. Ukuba sifuna ukufumana iirekhodi ze-N ezilandelayo (i-pagination), sinokusebenzisa i-ID yokugqibela efunyenweyo, yandise inombolo yolandelelwano ngomnye ubuze kwakhona. Makhe sijonge oku kulo mzekelo ulandelayo. Siqala ukongeza izinto ezili-10 nge XADD (ucinga ukuba i-mystream sele igcwele izinto ezili-10). Ukuqala ukuphindaphinda ukufumana izinto ezi-2 ngomyalelo ngamnye, siqala ngoluhlu olupheleleyo kodwa nge-COUNT ilingana no-2.

> XRANGE mystream - + COUNT 2
1) 1) 1519073278252-0
   2) 1) "foo"
      2) "value_1"
2) 1) 1519073279157-0
   2) 1) "foo"
      2) "value_2"

Ukuqhubeka nokuphindaphinda ngezinto ezimbini ezilandelayo, kufuneka sikhethe i-ID yokugqibela efunyenweyo, oko kukuthi 1519073279157-0, kwaye songeze i-1 inombolo yolandelelwano.
I-ID enesiphumo, kule meko 1519073279157-1, ngoku ingasetyenziswa njengesiqalo esitsha soluhlu lwengxabano kumnxeba olandelayo. XRANGE:

> XRANGE mystream 1519073279157-1 + COUNT 2
1) 1) 1519073280281-0
   2) 1) "foo"
      2) "value_3"
2) 1) 1519073281432-0
   2) 1) "foo"
      2) "value_4"

Kwaye nangokunjalo. Ngenxa yokuntsonkotha XRANGE yi O(log(N)) ukukhangela kwaye ke O(M) ukubuyisela iM element, ngoku inyathelo ngalinye lophindaphindo liyakhawuleza. Ngoko ke, ukusebenzisa XRANGE imisinga inokuphindaphindwa ngokufanelekileyo.

Iqela XREVRANGE iyalingana XRANGE, kodwa ibuyisela izinto ngolandelelwano:

> XREVRANGE mystream + - COUNT 1
1) 1) 1519073287312-0
   2) 1) "foo"
      2) "value_10"

Nceda uqaphele ukuba umyalelo XREVRANGE ithatha iingxoxo zoluhlu qalisa kwaye ime ngolandelelwano.

Ukufunda amangenelo amatsha usebenzisa iXREAD

Rhoqo umsebenzi uvela wokurhuma kumsinga kwaye ufumane imiyalezo emitsha kuphela. Lo mbono unokubonakala ufana neRedis Pub/Sub okanye uvimba uLuhlu lweRedis, kodwa kukho umahluko osisiseko kwindlela yokusebenzisa iRedis Stream:

  1. Umyalezo ngamnye omtsha uhanjiswa kubo bonke ababhalisile ngokungagqibekanga. Oku kuziphatha kwahlukile kuLuhlu lweRedis oluvalayo, apho umyalezo omtsha uya kufundwa kuphela ngumrhumi omnye.
  2. Ngelixa ukwiRedis Pub/Sub yonke imiyalezo ilityalwe kwaye ayizange iqhubeke, kuKhombisa yonke imiyalezo igcinwa ngokungenasiphelo (ngaphandle kokuba umxhasi ubangela ngokucacileyo ucimo).
  3. IRedis Stream ikuvumela ukuba uhlukanise ukufikelela kwimiyalezo ngaphakathi komsinga omnye. Umrhumi othile unokubona kuphela imbali yakhe yomyalezo wobuqu.

Ungarhuma kumsonto kwaye ufumane imiyalezo emitsha usebenzisa umyalelo XREAD. Kunzima kancinci kunoko XRANGE, ngoko siza kuqala ngemizekelo elula kuqala.

> XREAD COUNT 2 STREAMS mystream 0
1) 1) "mystream"
   2) 1) 1) 1519073278252-0
         2) 1) "foo"
            2) "value_1"
      2) 1) 1519073279157-0
         2) 1) "foo"
            2) "value_2"

Umzekelo ongasentla ubonisa ifom engathinteliyo XREAD. Qaphela ukuba ukhetho lwe-COUNT alukhethi. Ngapha koko, ekuphela komyalelo ofunekayo ukhetho lukhetho lwe-STREAMS, oluchaza uluhlu lwemilambo kunye nesona sichongi siphezulu esihambelanayo. Sibhale "STREAMS mystream 0" - sifuna ukufumana zonke iirekhodi zomlambo wam kunye nesazisi esikhulu kuno "0-0". Njengoko unokubona kumzekelo, umyalelo ubuyisela igama lomsonto kuba sinokurhuma kwimisonto emininzi ngexesha elinye. Singabhala, umzekelo, "STREAMS mystream otherstream 0 0". Nceda uqaphele ukuba emva kokhetho lwe-STREAMS kufuneka siqale sinikeze amagama ayo yonke imijelo efunekayo kwaye emva koko kuphela uluhlu lwezazisi.

Kolu hlobo lulula umyalelo awenzi nto ikhethekileyo xa kuthelekiswa nayo XRANGE. Nangona kunjalo, into enomdla kukuba sinokujika ngokulula XREAD kumyalelo othintelayo, ichaza i-Block yengxoxo:

> XREAD BLOCK 0 STREAMS mystream $

Kulo mzekelo ungentla, i-Block entsha ikhethwa ngexesha lokuphuma kwe-0 milliseconds (oku kuthetha ukulinda ngokungenasiphelo). Ngaphezu koko, endaweni yokudlula isazisi esiqhelekileyo somsinga wam, isichongi esikhethekileyo $ sapasiswa. Esi sichongi sikhethekileyo sithetha ukuba XREAD kufuneka isebenzise esona sichongi siphezulu kumjelo wam njengesichongi. Ke siya kufumana kuphela imiyalezo emitsha ukusukela oko siqale ukumamela. Ngandlela thile oku kufana nomyalelo we Unix "umsila -f".

Qaphela ukuba xa usebenzisa i-Block yenketho akuyomfuneko ukuba sisebenzise isichongi esikhethekileyo $. Singasebenzisa nasiphi na isichongi esikhoyo kumjelo. Ukuba iqela linokwenza inkonzo yethu ngokukhawuleza ngaphandle kokuvala, liya kwenza njalo, ngaphandle koko liya kuvala.

Ukuthintela XREAD inokumamela imisonto emininzi ngexesha elinye, kufuneka uchaze amagama abo. Kule meko, umyalelo uya kubuyisela irekhodi lomjelo wokuqala ofumene idatha. Umrhumi wokuqala ovaliweyo kumsonto onikiweyo uya kufumana idatha kuqala.

Amaqela abathengi

Kwimisebenzi ethile, sifuna ukunciphisa umrhumo wokufikelela kwimiyalezo ngaphakathi komsonto omnye. Umzekelo apho oku kunokuba luncedo kumgca womyalezo onabasebenzi abaya kufumana imiyalezo eyahlukileyo kumsonto, evumela ukuqhubekekiswa komyalezo ukukala.

Ukuba sicinga ukuba sinababhalisi abathathu C1, C2, C3 kunye nentambo equlathe imiyalezo 1, 2, 3, 4, 5, 6, 7, ke imiyalezo iya kuhanjiswa njengakumzobo ongezantsi:

1 -> C1
2 -> C2
3 -> C3
4 -> C1
5 -> C2
6 -> C3
7 -> C1

Ukufezekisa esi siphumo, i-Redis Stream isebenzisa ingqiqo ebizwa ngokuba yiQela labaThengi. Le ngcamango iyafana nomrhumi we-pseudo, ofumana idatha evela kumsinga, kodwa eneneni inikezelwa ngababhalisi abaninzi ngaphakathi kweqela, inika iziqinisekiso ezithile:

  1. Umyalezo ngamnye usiwa kubabhalisi owahlukileyo kwiqela.
  2. Ngaphakathi kweqela, ababhalisi bachongwa ngamagama abo, nto leyo engumtya wemeko. Ukuba umrhumi uyehla okwethutyana kwiqela, unokubuyiselwa kwiqela esebenzisa igama lakhe elahlukileyo.
  3. IQela ngalinye labaThengi lilandela "umyalezo wokuqala ongafundwanga". Xa umrhumi ecela imiyalezo emitsha, anokufumana kuphela imiyalezo engazange ithunyelwe ngaphambili kuye nawuphi na umrhumi kwiqela.
  4. Kukho umyalelo wokuqinisekisa ngokucacileyo ukuba umyalezo uqhutywe ngempumelelo ngumrhumi. Ude ubizwe lo myalelo, umyalezo oceliweyo uya kuhlala kwimo "pending".
  5. Ngaphakathi kweQela labaThengi, umrhumi ngamnye unokucela imbali yemiyalezo ethunyelwe kuye, kodwa ayikalungiswa (kwimo "elindileyo")

Ngandlela ithile, imeko yeqela inokubonakaliswa ngolu hlobo lulandelayo:

+----------------------------------------+
| consumer_group_name: mygroup          
| consumer_group_stream: somekey        
| last_delivered_id: 1292309234234-92    
|                                                           
| consumers:                                          
|    "consumer-1" with pending messages  
|       1292309234234-4                          
|       1292309234232-8                          
|    "consumer-42" with pending messages 
|       ... (and so forth)                             
+----------------------------------------+

Ngoku lixesha lokuqhelana nemiyalelo ephambili yeQela labathengi, eyile:

  • XGROUP esetyenziselwa ukuyila, ukutshabalalisa nokulawula amaqela
  • XREADGROUP isetyenziselwa ukufunda umjelo kwiqela
  • XACK - lo myalelo uvumela umrhumi ukuba aphawule umyalezo njengoko uqhutywe ngempumelelo

Ukudalwa kweQela labaThengi

Makhe sicinge ukuba umlambo wam sele ukhona. Emva koko umyalelo wokudala iqela uya kujongeka ngolu hlobo:

> XGROUP CREATE mystream mygroup $
OK

Xa usenza iqela, kufuneka sidlulise isichongi, siqale apho iqela liya kufumana imiyalezo. Ukuba sifuna ukufumana yonke imiyalezo emitsha, ngoko ke sinokusebenzisa isichongi esikhethekileyo $ (njengakumzekelo wethu ongentla). Ukuba ukhankanya u-0 endaweni yesazisi esikhethekileyo, ngoko yonke imiyalezo kumsonto iya kufumaneka kwiqela.

Ngoku ukuba iqela lenziwe, sinokuqala ngokukhawuleza ukufunda imiyalezo usebenzisa umyalelo XREADGROUP. Lo myalelo ufana kakhulu ne XREAD kwaye ixhasa ukhetho olukhethiweyo lwe-Block. Nangona kunjalo, kukho ukhetho lweGROUP olufunekayo ekufuneka lusoloko lucaciswa ngeengxoxo ezimbini: igama leqela kunye negama lomrhumi. Ukhetho lwe-COUNT luyaxhaswa.

Ngaphambi kokufunda umsonto, masibeke imiyalezo apho:

> XADD mystream * message apple
1526569495631-0
> XADD mystream * message orange
1526569498055-0
> XADD mystream * message strawberry
1526569506935-0
> XADD mystream * message apricot
1526569535168-0
> XADD mystream * message banana
1526569544280-0

Ngoku makhe sizame ukufunda lo msinga kwiqela:

> XREADGROUP GROUP mygroup Alice COUNT 1 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) 1526569495631-0
         2) 1) "message"
            2) "apple"

Lo myalelo ungasentla ufundeka ngokwezwi nezwi ngolu hlobo lulandelayo:

"Mna, umrhumi u-Alice, ilungu leqela lam, ndifuna ukufunda umyalezo omnye ovela kumjelo wam ongazange usiwe nakubani na ngaphambili."

Ngalo lonke ixesha umrhumi esenza umsebenzi kwiqela, kufuneka anike igama lakhe, ezichaza ngokukodwa kwiqela. Kukho enye inkcukacha ebaluleke kakhulu kulo myalelo ungentla - isichongi esikhethekileyo ">". Esi sichongi sikhethekileyo sihluza imiyalezo, sishiya kuphela leyo ingazange ithunyelwe ngaphambili.

Kwakhona, kwiimeko ezikhethekileyo, ungakhankanya isazisi sokwenyani esinje ngo-0 okanye nasiphi na esinye isichongi esisebenzayo. Kule meko umyalelo XREADGROUP izakukubuyisela imbali yemiyalezo enemo "elindileyo" enikezelwe kubabhalisi ochaziweyo (Alice) kodwa ayikavunywa kusetyenziswa umyalelo. XACK.

Sinokuyivavanya le ndlela yokuziphatha ngokucacisa ngokukhawuleza i-ID ye-0, ngaphandle kokukhetha COUNT. Siza kubona ngokulula umyalezo omnye olindileyo, oko kukuthi, umyalezo we-apile:

> XREADGROUP GROUP mygroup Alice STREAMS mystream 0
1) 1) "mystream"
   2) 1) 1) 1526569495631-0
         2) 1) "message"
            2) "apple"

Nangona kunjalo, ukuba siqinisekisa umyalezo njengoko uqhutywe ngempumelelo, awusayi kuphinda uboniswe:

> XACK mystream mygroup 1526569495631-0
(integer) 1
> XREADGROUP GROUP mygroup Alice STREAMS mystream 0
1) 1) "mystream"
   2) (empty list or set)

Ngoku lithuba likaBob lokufunda into:

> XREADGROUP GROUP mygroup Bob COUNT 2 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) 1526569498055-0
         2) 1) "message"
            2) "orange"
      2) 1) 1526569506935-0
         2) 1) "message"
            2) "strawberry"

UBob, ilungu leqela lam, akacelanga ngaphezulu kwemiyalezo emibini. Umyalelo uxela kuphela imiyalezo engathunyelwanga ngenxa yesazisi esikhethekileyo ">". Njengoko ubona, umyalezo "i-apile" awuyi kuboniswa njengoko sele uhanjiswe ku-Alice, ngoko uBob ufumana "i-orenji" kunye ne "strawberry".

Ngale ndlela, uAlice, uBob, kunye nawuphi na omnye umrhumi kwiqela unokufunda imiyalezo eyahlukileyo kumsinga omnye. Basenokufunda nembali yabo yemiyalezo engalungiswanga okanye baphawule imiyalezo njengeqwalaselwe.

Kukho izinto ezimbalwa ekufuneka uzigcine engqondweni:

  • Ngokukhawuleza ukuba umrhumi uthatha umyalezo njengomyalelo XREADGROUP, lo myalezo ungena kwimo "elindileyo" kwaye unikezelwe kubhalisi othile. Abanye ababhalisile beqela abayi kukwazi ukufunda lo myalezo.
  • Ababhalisi benziwa ngokuzenzekelayo xa kukhankanywa okokuqala, akukho mfuneko yokuba badale ngokucacileyo.
  • Ngo kunceda XREADGROUP Unokufunda imiyalezo evela kwimisonto emininzi eyahlukeneyo ngexesha elinye, kodwa ukuze oku kusebenze kufuneka uqale wenze amaqela anegama elifanayo kumsonto ngamnye usebenzisa. XGROUP

Ukuchacha emva kokusilela

Umrhumi unokubuyisela ekungaphumelelini kwaye afunde kwakhona uluhlu lwakhe lwemiyalezo kunye nesimo "sokulinda". Nangona kunjalo, kwihlabathi lokwenyani, ababhalisi banokungaphumeleli ekugqibeleni. Kwenzeka ntoni kwimiyalezo encamatheleyo yomrhumi ukuba umrhumi akakwazi kuphinda afumane ukusilela?
IQela labathengi libonelela ngophawu olusetyenziselwa iimeko ezinje- xa kufuneka utshintshe umnini wemiyalezo.

Into yokuqala ekufuneka uyenzile kukufowunela umyalelo XPENDING, ebonisa yonke imiyalezo kwiqela elinesimo "ilindileyo". Ngeyona ndlela ilula, umyalelo ubizwa ngokuba neengxoxo ezimbini kuphela: igama lomsonto kunye negama leqela:

> XPENDING mystream mygroup
1) (integer) 2
2) 1526569498055-0
3) 1526569506935-0
4) 1) 1) "Bob"
      2) "2"

Iqela libonise inani lemiyalezo engalungiswanga yeqela lonke kunye nomrhumi ngamnye. SinoBob kuphela onemiyalezo emibini ebalaseleyo kuba ekuphela komyalezo u-Alice awucelileyo waqinisekiswa ngawo XACK.

Sinokucela ulwazi oluninzi sisebenzisa iingxoxo ezingaphezulu:

XPENDING {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]
{start-id} {end-id} - uluhlu lwezazisi (ungasebenzisa "-" kunye "+")
{count} - inani lokuzama ukuhanjiswa
{igama lomthengi} - igama leqela

> XPENDING mystream mygroup - + 10
1) 1) 1526569498055-0
   2) "Bob"
   3) (integer) 74170458
   4) (integer) 1
2) 1) 1526569506935-0
   2) "Bob"
   3) (integer) 74170458
   4) (integer) 1

Ngoku sineenkcukacha zomyalezo ngamnye: i-ID, igama lomrhumi, ixesha lokungenzi nto kwii-milliseconds kwaye ekugqibeleni inani lemizamo yokuhambisa. Sinemiyalezo emibini evela kuBob kwaye baye bangenzi nto kwi-74170458 milliseconds, malunga neeyure ze-20.

Nceda uqaphele ukuba akukho mntu usithintelayo ekujongeni ukuba wawuthini umxholo womyalezo ngokusebenzisa nje XRANGE.

> XRANGE mystream 1526569498055-0 1526569498055-0
1) 1) 1526569498055-0
   2) 1) "message"
      2) "orange"

Kufuneka siphinde isichongi esifanayo kabini kwiingxoxo. Ngoku sinoluvo oluthile, u-Alice unokugqiba kwelokuba emva kweeyure ezingama-20 zexesha lokuphumla, uBob mhlawumbi akasayi kuphola, kwaye lixesha lokubuza loo miyalezo kwaye uqalise ukuyilungiselela uBob. Kule nto sisebenzisa umyalelo XCLAIM:

XCLAIM {key} {group} {consumer} {min-idle-time} {ID-1} {ID-2} ... {ID-N}

Ngokusebenzisa lo myalelo, sinokufumana umyalezo "wasemzini" ongekasetyenzwa ngokutshintsha umniniyo ukuba abe {consumer}. Nangona kunjalo, sinokubonelela nangexesha elincinane lokungasebenzi {min-idle-ixesha}. Oku kunceda ukuphepha imeko apho abathengi ababini bazama ukutshintsha ngaxeshanye umnini wemiyalezo efanayo:

Client 1: XCLAIM mystream mygroup Alice 3600000 1526569498055-0
Clinet 2: XCLAIM mystream mygroup Lora 3600000 1526569498055-0

Umthengi wokuqala uya kusetha kwakhona ixesha lokuphumla kwaye andise ikhawunta yokuhambisa. Ngoko ke umxhasi wesibini akayi kuba nako ukuyicela.

> XCLAIM mystream mygroup Alice 3600000 1526569498055-0
1) 1) 1526569498055-0
   2) 1) "message"
      2) "orange"

Umyalezo ubangwe ngempumelelo ngu-Alice, onokuthi ngoku uqhubekise umyalezo kwaye awamkele.

Kulo mzekelo ungasentla, unokubona ukuba isicelo esiyimpumelelo sibuyisela imixholo yomyalezo ngokwawo. Nangona kunjalo, oku akuyomfuneko. Ukhetho lwe-JUSTID lunokusetyenziswa ukubuyisela ii-ID zomyalezo kuphela. Oku kuluncedo ukuba awunamdla kwiinkcukacha zomyalezo kwaye ufuna ukwandisa ukusebenza kwenkqubo.

Ikhawunta yokuhanjiswa

Ikhawuntari oyibonayo kwimveliso XPENDING linani lokuhanjiswa komyalezo ngamnye. Ikhawuntara enjalo yongezwa ngeendlela ezimbini: xa umyalezo ucelwe ngempumelelo nge XCLAIM okanye xa ifowuni isetyenziswa XREADGROUP.

Yinto eqhelekileyo ukuba eminye imiyalezo ithunyelwe ngamaxesha amaninzi. Into ephambili kukuba yonke imiyalezo igqitywe ekugqibeleni. Ngamanye amaxesha iingxaki ziyenzeka xa kusetyenzwa umyalezo kuba umyalezo ngokwawo wonakalisiwe, okanye inkqubo yomyalezo ibangela impazamo kwikhowudi yomphathi. Kule meko, kunokuvela ukuba akukho mntu uya kukwazi ukuqhubekekisa lo myalezo. Ekubeni sinekhawuntari yokuzama ukuhanjiswa, sinokusebenzisa le khawuntala ukufumanisa iimeko ezinjalo. Ngoko ke, xa ubalo lonikezelo lufikelela kwinani eliphezulu olichazayo, kuya kuba bubulumko ngakumbi ukubeka umyalezo onjalo komnye umsonto kwaye uthumele isaziso kumphathi wenkqubo.

Ilizwe loMsonto

Iqela XINFO esetyenziselwa ukucela ulwazi olwahlukeneyo malunga nomsonto kunye namaqela awo. Umzekelo, umyalelo osisiseko ujongeka ngolu hlobo:

> XINFO STREAM mystream
 1) length
 2) (integer) 13
 3) radix-tree-keys
 4) (integer) 1
 5) radix-tree-nodes
 6) (integer) 2
 7) groups
 8) (integer) 2
 9) first-entry
10) 1) 1524494395530-0
    2) 1) "a"
       2) "1"
       3) "b"
       4) "2"
11) last-entry
12) 1) 1526569544280-0
    2) 1) "message"
       2) "banana"

Umyalelo ongentla ubonisa ulwazi jikelele malunga nomjelo okhankanyiweyo. Ngoku umzekelo onzima ngakumbi:

> XINFO GROUPS mystream
1) 1) name
   2) "mygroup"
   3) consumers
   4) (integer) 2
   5) pending
   6) (integer) 2
2) 1) name
   2) "some-other-group"
   3) consumers
   4) (integer) 1
   5) pending
   6) (integer) 0

Umyalelo ongentla ubonisa ulwazi ngokubanzi kuwo onke amaqela omsonto okhankanyiweyo

> XINFO CONSUMERS mystream mygroup
1) 1) name
   2) "Alice"
   3) pending
   4) (integer) 1
   5) idle
   6) (integer) 9104628
2) 1) name
   2) "Bob"
   3) pending
   4) (integer) 1
   5) idle
   6) (integer) 83841983

Umyalelo ongentla ubonisa ulwazi kubo bonke ababhalisi bomlambo ochaziweyo kunye neqela.
Ukuba uyalibala i-syntax yomyalelo, vele ubuze umyalelo ngokwawo ngoncedo:

> XINFO HELP
1) XINFO {subcommand} arg arg ... arg. Subcommands are:
2) CONSUMERS {key} {groupname}  -- Show consumer groups of group {groupname}.
3) GROUPS {key}                 -- Show the stream consumer groups.
4) STREAM {key}                 -- Show information about the stream.
5) HELP                         -- Print this help.

Umda woBubungakanani boMsinga

Izicelo ezininzi azifuni ukuqokelela idatha ibe ngumsinga ngonaphakade. Kudla ngokuba luncedo ukuba nenani eliphezulu lemiyalezo evumelekileyo ngomsonto ngamnye. Kwezinye iimeko, kuluncedo ukususa yonke imiyalezo ukusuka kumsonto ukuya kwenye ivenkile ethe gqolo xa ubungakanani bomsonto obuchaziweyo bufikelelwe. Unganciphisa ubungakanani bomlambo usebenzisa ipharamitha yeMAXLEN kumyalelo XADD:

> XADD mystream MAXLEN 2 * value 1
1526654998691-0
> XADD mystream MAXLEN 2 * value 2
1526654999635-0
> XADD mystream MAXLEN 2 * value 3
1526655000369-0
> XLEN mystream
(integer) 2
> XRANGE mystream - +
1) 1) 1526654999635-0
   2) 1) "value"
      2) "2"
2) 1) 1526655000369-0
   2) 1) "value"
      2) "3"

Xa usebenzisa i-MAXLEN, iirekhodi ezindala zicinywa ngokuzenzekelayo xa zifikelela kubude obuchaziweyo, ngoko ke umlambo unomlinganiselo ongatshintshiyo. Nangona kunjalo, ukuthenwa kule meko akwenzeki ngeyona ndlela isebenzayo kwimemori yeRedis. Ungayiphucula imeko ngolu hlobo lulandelayo:

XADD mystream MAXLEN ~ 1000 * ... entry fields here ...

I ~ argument kumzekelo ongasentla ithetha ukuba akufuneki sinciphise ubude bomsinga ukuya kwixabiso elithile. Kumzekelo wethu, eli inokuba naliphi na inani elikhulu okanye elilingana ne-1000 (umzekelo, 1000, 1010, okanye 1030). Sichaze ngokucacileyo ukuba sifuna ukuba umjelo wethu ugcine ubuncinci iirekhodi ezili-1000. Oku kwenza ukuba ulawulo lwememori lusebenze ngakumbi ngaphakathi kweRedis.

Kukwakho neqela elahlukileyo XTRIM, eyenza into enye:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

Ukugcinwa okuzingisileyo kunye nokuphindaphinda

I-Redis Stream iphindwa ngokungafaniyo kwiindawo zekhoboka kwaye igcinwe kwiifayile ezifana ne-AOF (i-snapshot yazo zonke iinkcukacha) kunye ne-RDB (log yayo yonke imisebenzi yokubhala). Ukuphindaphindwa kobume baMaqela abaThengi nako kuyaxhaswa. Ngoko ke, ukuba umyalezo ukwisimo "sokulinda" kwi-master node, ngoko kwii-nodes zekhoboka lo myalezo uya kuba nesimo esifanayo.

Ukususa izinto ezizimeleyo kumsinga

Kukho umyalelo okhethekileyo wokucima imiyalezo XDEL. Umyalelo ufumana igama lomsonto olandelwa zii-ID zomyalezo oza kucinywa:

> XRANGE mystream - + COUNT 2
1) 1) 1526654999635-0
   2) 1) "value"
      2) "2"
2) 1) 1526655000369-0
   2) 1) "value"
      2) "3"
> XDEL mystream 1526654999635-0
(integer) 1
> XRANGE mystream - + COUNT 2
1) 1) 1526655000369-0
   2) 1) "value"
      2) "3"

Xa usebenzisa lo myalelo, kufuneka uthathele ingqalelo ukuba inkumbulo yangempela ayiyi kukhutshwa ngokukhawuleza.

Zero ubude imisinga

Umahluko phakathi kwemijelo kunye nezinye izakhiwo zedatha yeRedis kukuba xa ezinye izakhiwo zedatha zingasenazo izinto ngaphakathi kwazo, njengempembelelo yecala, ulwakhiwo lwedatha ngokwalo luya kususwa kwimemori. Ke, umzekelo, iseti ehleliweyo iya kususwa ngokupheleleyo xa umnxeba we-ZREM ususa into yokugqibela. Endaweni yoko, imisonto ivumelekile ukuba ihlale kwinkumbulo nangaphandle kokuba naziphi na izinto ngaphakathi.

isiphelo

I-Redis Stream ilungele ukwenza abathengisi bemiyalezo, imigca yemiyalezo, ukugawulwa kwemithi okudityanisiweyo, kunye neenkqubo zokuxoxa zokugcina imbali.

Njengoko ndakhe ndatsho Niklaus Wirth, iinkqubo algorithms plus izakhiwo data, kwaye Redis sele ikunika zombini.

umthombo: www.habr.com

Yongeza izimvo