I-Redis Stream - ukwethembeka kanye nokuqina kwezinhlelo zakho zemiyalezo

I-Redis Stream - ukwethembeka kanye nokuqina kwezinhlelo zakho zemiyalezo

I-Redis Stream iwuhlobo olusha lwedatha engabonakali eyethulwe eRedis ngenguqulo 5.0
Ngokwengqondo, i-Redis Stream iwuhlu ongangeza kulo okufakiwe. Ukufakwa ngakunye kunesikhombi esihlukile. Ngokuzenzakalelayo, i-ID ikhiqizwa ngokuzenzakalela futhi ifaka isitembu sesikhathi. Ngakho-ke, ungakwazi ukubuza ububanzi bamarekhodi ngokuhamba kwesikhathi, noma uthole idatha entsha njengoba ifika ekusakazweni, kufana nomyalo we-Unix othi "tail -f" ufunda ifayela lokungena bese ufriza ngenkathi ulinde idatha entsha. Qaphela ukuthi amaklayenti amaningi angalalela uchungechunge ngesikhathi esisodwa, njengezinqubo eziningi ze-"tail -f" zingakwazi ukufunda ifayela ngesikhathi esisodwa ngaphandle kokungqubuzana.

Ukuze siqonde zonke izinzuzo zohlobo olusha lwedatha, ake sibheke ngokushesha izakhiwo ze-Redis esezinesikhathi eside eziphindaphinda ingxenye yokusebenza kwe-Redis Stream.

Yenza kabusha i-PUB/SUB

I-Redis Pub/Sub iwuhlelo lwemiyalezo olula oseluvele lwakhiwe esitolo sakho senani elingukhiye. Nokho, ubulula buza ngentengo:

  • Uma umshicileli ngesizathu esithile ehluleka, khona-ke ulahlekelwa yibo bonke ababhalisile bakhe
  • Umshicileli udinga ukwazi ikheli eliqondile labo bonke ababhalisile
  • Umshicileli angase agcwalise kakhulu ababhalisile bakhe ngomsebenzi uma idatha ishicilelwa ngokushesha kunokuba icutshungulwa
  • Umlayezo uyasuswa kubhafa yomshicileli ngokushesha ngemva kokushicilelwa, kungakhathaliseki ukuthi bangaki ababhalisile futhi bakwazi ngokushesha kangakanani ukucubungula lo mlayezo.
  • Bonke ababhalisile bazothola umlayezo ngesikhathi esifanayo. Ababhalisile ngokwabo kufanele ngandlela thile bavumelane phakathi kwabo nge-oda lokucubungula umlayezo ofanayo.
  • Ayikho indlela eyakhelwe ngaphakathi yokuqinisekisa ukuthi obhalisile uwucubungule ngempumelelo umlayezo. Uma obhalisile ethola umlayezo futhi aphahlazeke ngesikhathi sokucubungula, umshicileli ngeke azi ngakho.

Redis List

Uhlu lwe-Redis luyisakhiwo sedatha esisekela ukuvimbela imiyalo yokufunda. Ungakwazi ukwengeza nokufunda imilayezo kusukela ekuqaleni noma ekupheleni kohlu. Ngokusekelwe kulesi sakhiwo, ungenza isitaki esihle noma ulayini wesistimu yakho esabalalisiwe, futhi ezimweni eziningi lokhu kuzokwanela. Umehluko omkhulu ku-Redis Pub/Sub:

  • Umlayezo ulethwa kuklayenti elilodwa. Iklayenti lokuqala elivinjwe ukufunda lizothola idatha kuqala.
  • U-Clint kufanele aqale umsebenzi wokufunda womlayezo ngamunye ngokwakhe. Uhlu alwazi lutho ngamaklayenti.
  • Imilayezo igcinwa kuze kube yilapho othile eyifunda noma eyisusa ngokusobala. Uma ulungiselela iseva ye-Redis ukuze iguqule idatha kudiski, khona-ke ukwethembeka kwesistimu kukhula kakhulu.

Isingeniso Sokusakaza

Ukwengeza okungenayo ekusakazweni

Ithimba I-XADD yengeza into entsha ekusakazweni. Irekhodi aliyona nje iyunithi yezinhlamvu, liqukethe amapheya enani elingukhiye elilodwa noma amaningi. Ngakho, okufakiwe ngakunye sekuvele kuhlelekile futhi kufana nesakhiwo sefayela le-CSV.

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

Esibonelweni esingenhla, sengeza izinkambu ezimbili ekusakazweni ngegama (ukhiye) "mystream": "i-id yenzwa" kanye "nezinga lokushisa" elinamanani "1234" kanye "19.8", ngokulandelanayo. Njengempikiswano yesibili, umyalo uthatha isihlonzi esizonikezwa isingeniso - lesi sihlonzi sikhomba ngokuhlukile okufakiwe ngakunye ekusakazweni. Nokho, kulokhu siphumelele * ngoba sifuna iRedis isikhiqizele umazisi omusha. I-ID entsha ngayinye izokwenyuka. Ngakho-ke, okufakiwe okusha ngakunye kuzoba nesihlonzi esiphezulu ngokuhlobene nokufakiwe kwangaphambilini.

Ifomethi yesikhombi

I-ID yokufaka ibuyiswe ngomyalo I-XADD, inezingxenye ezimbili:

{millisecondsTime}-{sequenceNumber}

millisecondTime - Isikhathi se-Unix kuma-millisecond (isikhathi seseva ye-Redis). Kodwa-ke, uma isikhathi samanje sifana noma singaphansi kwesikhathi sokurekhoda kwangaphambilini, kusho ukuthi isitembu sesikhathi sokurekhoda kwangaphambilini siyasetshenziswa. Ngakho-ke, uma isikhathi seseva sibuyela emuva ngesikhathi, isihlonzi esisha sisazogcina impahla yokwengeza.

ukulandelanaNumber esetshenziselwa amarekhodi adalwe nge-millisecond efanayo. ukulandelanaNumber izokwengezwa ngo-1 ngokuhlobene nokufakiwe kwangaphambilini. Ngoba i ukulandelanaNumber ingamabhithi angu-64 ngosayizi, ngakho-ke ekusebenzeni akufanele ungene emkhawulweni wenani lamarekhodi angenziwa phakathi kwe-millisecond eyodwa.

Ifomethi yezihlonzi ezinjalo ingase ibonakale iyinqaba uma uthi nhlá. Umfundi ongathembekile angase azibuze ukuthi kungani isikhathi siyingxenye yesikhombi. Isizathu ukuthi ukusakazwa kwe-Redis kusekela imibuzo yebanga nge-ID. Njengoba isihlonzi sihlotshaniswa nesikhathi irekhodi lidalwe ngaso, lokhu kwenza kube nokwenzeka ukubuza ububanzi besikhathi. Sizobheka isibonelo esithile uma sibheka umyalo XRANGE.

Uma ngesizathu esithile umsebenzisi edinga ukucacisa isihlonzi sakhe, okuthi, ngokwesibonelo, sihlotshaniswe nohlelo oluthile lwangaphandle, khona-ke singaludlulisela kumyalo. I-XADD esikhundleni sokuthi * njengoba kukhonjisiwe ngezansi:

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

Sicela uqaphele ukuthi kulokhu kufanele uqaphe umazisi ngokwakho. Esibonelweni sethu, inkomba encane ithi "0-1", ngakho umyalo ngeke wamukele esinye isihlonzi esilingana noma esingaphansi 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

Inombolo yamarekhodi ngokusakaza ngakunye

Kungenzeka ukuthi uthole inombolo yamarekhodi emfudlaneni ngokusebenzisa umyalo XLEN. Isibonelo sethu, lo myalo uzobuyisela inani elilandelayo:

> XLEN somestream
(integer) 2

Imibuzo ehlukahlukene - XRANGE kanye ne-XREVRANGE

Ukuze sicele idatha ngobubanzi, sidinga ukucacisa izihlonzi ezimbili - isiqalo nesiphetho sobubanzi. Ububanzi obubuyisiwe buzofaka zonke izici, kuhlanganise nemingcele. Kukhona futhi izihlonzi ezimbili ezikhethekile “-” kanye “+”, ngokulandelanayo okusho ukuthi inkomba encane kunazo zonke (irekhodi lokuqala) nenkulu kunazo zonke (irekhodi lokugcina) ekusakazweni. Isibonelo esingezansi sizofaka ohlwini konke okufakiwe kokusakaza.

> 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 ngalinye elibuyisiwe liwuchungechunge lwezinto ezimbili: isihlonzi nohlu lwamapheya enani elingukhiye. Sesivele sishilo ukuthi izihlonzi zerekhodi zihlobene nesikhathi. Ngakho-ke, singacela ububanzi benkathi ethile yesikhathi. Nokho, esicelweni singacacisa hhayi isihlonzi esigcwele, kodwa kuphela isikhathi se-Unix, sishiya ingxenye ehlobene ukulandelanaNumber. Ingxenye ekhishiwe yesikhombi izosethwa ngokuzenzakalelayo ibe uziro ekuqaleni kobubanzi futhi ibe inani eliphakeme elingenzeka ekugcineni kobubanzi. Ngezansi kunesibonelo sokuthi ungacela kanjani ibanga lama-millisecond amabili.

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

Sinokufaka okukodwa kuphela kulobu bubanzi, nokho kumasethi wedatha wangempela umphumela obuyisiwe ungaba mkhulu. Ngokwalesi sizathu XRANGE isekela inketho COUNT. Ngokucacisa ubuningi, singavele sithole amarekhodi angu-N wokuqala. Uma sidinga ukuthola amarekhodi angu-N alandelayo (amakhasi), singasebenzisa i-ID yokugcina etholiwe, siyikhulise ukulandelanaNumber ngamunye aphinde abuze. Ake sibheke lokhu esibonelweni esilandelayo. Siqala ukwengeza izakhi eziyi-10 nge I-XADD (kucatshangwa ukuthi ukusakaza kwami ​​kwase kugcwele izinto eziyi-10). Ukuqala ukuphindaphinda ukuthola izici ezi-2 ngomyalo ngamunye, siqala ngobubanzi obugcwele kodwa ngo-COUNT olingana 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"

Ukuze uqhubeke nokuphindaphinda ngezinto ezimbili ezilandelayo, sidinga ukukhetha i-ID yokugcina etholiwe, okungukuthi 1519073279157-0, bese wengeza u-1 ku- ukulandelanaNumber.
I-ID ewumphumela, kuleli cala ethi 1519073279157-1, manje ingasetshenziswa njengesiqalo esisha sokungqubuzana kobubanzi ocingweni olulandelayo. 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"

Njalo njalo. Ngoba inkimbinkimbi XRANGE ithi O(log(N)) ukusesha bese kuba O(M) ukubuyisela ama-elementi e-M, bese isinyathelo ngasinye sokuphindaphinda siyashesha. Ngakho, ngokusebenzisa XRANGE ukusakazwa kungaphindaphindwa kahle.

Ithimba XREVRANGE kuyalingana XRANGE, kodwa ibuyisela izakhi ngokulandelana okuphambene:

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

Sicela uqaphele ukuthi umyalo XREVRANGE ithatha izimpikiswano zobubanzi isiqalo futhi ime ngokulandelana okuhlanekezelwe.

Ukufunda okufakiwe okusha usebenzisa i-XREAD

Ngokuvamile umsebenzi uvela wokubhalisela ukusakaza nokuthola imilayezo emisha kuphela. Lo mqondo ungase ubonakale ufana ne-Redis Pub/Sub noma ukuvimbela Uhlu lwe-Redis, kodwa kunomehluko obalulekile endleleni yokusebenzisa i-Redis Stream:

  1. Umlayezo omusha ngamunye ulethwa kubo bonke ababhalisile ngokuzenzakalela. Lokhu kuziphatha kuhlukile kokuthi Uhlu lwe-Redis oluvimbayo, lapho umlayezo omusha uzofundwa kuphela obhalisile oyedwa.
  2. Ngenkathi uku-Redis Pub/Sub yonke imilayezo iyalibaleka futhi ayiqhubeki, kokuthi Ukusakaza-bukhoma yonke imilayezo igcinwa unomphela (ngaphandle kwalapho iklayenti libangela ukususwa ngokusobala).
  3. I-Redis Stream ikuvumela ukuthi uhlukanise ukufinyelela kumilayezo ngaphakathi kokusakaza okukodwa. Obhalisile othile angabona kuphela umlando wemilayezo yakhe siqu.

Ungabhalisela uchungechunge futhi uthole imilayezo emisha usebenzisa umyalo XREAD. Kuyinkimbinkimbi kakhulu kunalokho XRANGE, ngakho-ke sizoqala ngezibonelo ezilula 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"

Isibonelo esingenhla sibonisa ifomu elingavimbeli XREAD. Qaphela ukuthi inketho COUNT ingokuzithandela. Eqinisweni, okuwukuphela kwenketho yomyalo edingekayo inketho ye-STREAMS, ecacisa uhlu lokusakaza kanye nesihlonzi esiphezulu esihambisanayo. Sibhale ukuthi “STREAMS mystream 0” - sifuna ukwamukela wonke amarekhodi okusakaza kwe-mystream anenkomba enkulu kuno-“0-0”. Njengoba ungabona esibonelweni, umyalo ubuyisela igama lentambo ngoba singakwazi ukubhalisela imicu eminingi ngesikhathi esisodwa. Singabhala, isibonelo, "STREAMS mystream otherstream 0 0". Sicela uqaphele ukuthi ngemva kwenketho ye-STREAMS sidinga kuqala sinikeze amagama akho konke ukusakaza okudingekayo bese kuphela uhlu lwezihlonzi.

Kuleli fomu elilula umyalo awenzi lutho olukhethekile uma uqhathaniswa nalo XRANGE. Nokho, okuthakazelisayo ukuthi singaphenduka kalula XREAD kumyalo ovimbayo, ecacisa impikiswano ethi VIMBELA:

> XREAD BLOCK 0 STREAMS mystream $

Esibonelweni esingenhla, inketho entsha ye-VIMBI icaciswe ngokuhamba kwesikhathi kwama-millisecond angu-0 (lokhu kusho ukulinda unomphela). Ngaphezu kwalokho, esikhundleni sokudlulisa isihlonzi esivamile sokusakazwa kwe-mystream, kudluliswe isihlonzi esikhethekile esingu-$. Lesi sihlonzi esikhethekile sisho lokho XREAD kufanele isebenzise isihlonzi esiphezulu ku-mystream njengesihlonzi. Ngakho sizothola kuphela imilayezo emisha kusukela ngesikhathi siqala ukulalela. Ngandlela thize lokhu kufana nomyalo we-Unix "umsila -f".

Qaphela ukuthi uma usebenzisa inketho ethi BLOCK asikho isidingo sokuthi sisebenzise isihlonzi esikhethekile $. Singasebenzisa noma yisiphi isihlonzi esikhona ekusakazweni. Uma ithimba lingakwazi ukusevisa isicelo sethu ngokushesha ngaphandle kokusivimba, lizokwenza kanjalo, kungenjalo lizovimba.

Ukuvimba XREAD futhi ungalalela imicu eminingi ngesikhathi esisodwa, udinga nje ukucacisa amagama abo. Kulesi simo, umyalo uzobuyisela irekhodi lokusakazwa kokuqala okuthole idatha. Obhalisile wokuqala ovinjwe uchungechunge oluthile uzothola idatha kuqala.

Amaqembu Abathengi

Kweminye imisebenzi, sifuna ukukhawulela ukufinyelela kwababhalisile kumilayezo phakathi kochungechunge olulodwa. Isibonelo lapho lokhu kungase kube usizo ulayini womlayezo onezisebenzi ezizothola imilayezo ehlukene ochungechungeni, okuvumela ukucutshungulwa komlayezo ukukala.

Uma sicabanga ukuthi sinababhalisi abathathu C1, C2, C3 kanye nentambo equkethe imilayezo 1, 2, 3, 4, 5, 6, 7, khona-ke imilayezo izonikezwa njengakumdwebo ongezansi:

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

Ukufeza lo mphumela, i-Redis Stream isebenzisa umqondo obizwa ngokuthi Iqembu Labathengi. Lo mqondo ufana nomuntu obhalisile mbumbulu, othola idatha kusuka ekusakazweni, kodwa empeleni unikezwa ababhalisile abaningi eqenjini, ehlinzeka ngeziqinisekiso ezithile:

  1. Umlayezo ngamunye ulethwa kobhalisile ohlukile eqenjini.
  2. Eqenjini, ababhalisile babonakala ngamagama abo, okuwuchungechunge oluzwelayo. Uma obhalisile ephuma eqenjini okwesikhashana, angabuyiselwa eqenjini esebenzisa igama lakhe eliyingqayizivele.
  3. Iqembu ngalinye labathengi lilandela umqondo "wokuqala ongafundiwe". Uma obhalisile ecela imilayezo emisha, angathola kuphela imilayezo engakaze ithunyelwe kunoma yimuphi obhalisile eqenjini.
  4. Kunomyalelo wokuqinisekisa ngokusobala ukuthi umlayezo ucutshungulwe ngempumelelo obhalisile. Kuze kube yilapho ubizwa lo myalo, umlayezo oceliwe uzohlala kusimo "sokulindiwe".
  5. Ngaphakathi kweQembu Labathengi, obhalisile ngamunye angacela umlando wemilayezo ethunyelwe kuye, kodwa ongakacutshungulwa (esimeni "esilindile")

Ngomqondo othile, isimo seqembu singavezwa ngale ndlela elandelayo:

+----------------------------------------+
| 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)                             
+----------------------------------------+

Manje sekuyisikhathi sokujwayelana nemiyalo eyinhloko yeQembu Labathengi, okungukuthi:

  • XGROUP esetshenziswa ukudala, ukucekela phansi kanye nokuphatha amaqembu
  • I-XREADGROUP esetshenziswa ukufunda ukusakaza eqenjini
  • XACK - lo myalo uvumela obhalisile ukuthi amake umlayezo njengocutshungulwe ngempumelelo

Ukwakhiwa Kweqembu Labathengi

Ake sicabange ukuthi ukusakaza kwami ​​sekuvele kukhona. Khona-ke umyalo wokudala iqembu uzobukeka kanje:

> XGROUP CREATE mystream mygroup $
OK

Lapho sidala iqembu, kufanele sidlulise isihlonzi, siqale lapho iqembu lizothola khona imilayezo. Uma sifuna ukwamukela yonke imilayezo emisha, singasebenzisa isihlonzi esikhethekile esingu-$ (njengesibonelo sethu esingenhla). Uma ucacisa u-0 esikhundleni sesihlonzi esikhethekile, yonke imilayezo ekuchungechunge izotholakala eqenjini.

Manje njengoba iqembu selidaliwe, singakwazi ukuqala ukufunda imilayezo ngokushesha sisebenzisa umyalo I-XREADGROUP. Lo myalo ufana kakhulu ne XREAD futhi isekela inketho ethi VIMBELA. Nokho, kunenketho ye-GROUP edingekayo okufanele ihlale icaciswa ngama-agumenti amabili: igama leqembu negama lobhalisile. Inketho COUNT nayo iyasekelwa.

Ngaphambi kokufunda uchungechunge, ake sibeke imilayezo lapho:

> 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

Manje ake sizame ukufunda lokhu kusakazwa eqenjini:

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

Umyalo ongenhla ufundeka njengezwi nezwi kanje:

"Mina, obhalisele u-Alice, ilungu leqembu lami, ngifuna ukufunda umlayezo owodwa ovela ku-mystream ongakaze ulethwe kunoma ubani ngaphambilini."

Ngaso sonke isikhathi lapho obhalisile enza umsebenzi eqenjini, kufanele anikeze igama lalo, eziveza ngokukhethekile ngaphakathi kweqembu. Kukhona omunye umniningwane obaluleke kakhulu emyalweni ongenhla - isihlonzi esikhethekile ">". Lesi sikhombi esikhethekile sihlunga imilayezo, sishiye kuphela leyo engakaze ihanjiswe ngaphambilini.

Futhi, ezimweni ezikhethekile, ungacacisa isihlonzi sangempela esifana no-0 noma esinye isihlonzi esivumelekile. Kulokhu umyalo I-XREADGROUP izokubuyisela umlando wemilayezo enesimo "sokulindiwe" elethwe kobhalisile abathile (u-Alice) kodwa ongakavunywa kusetshenziswa umyalo. XACK.

Singahlola lokhu kuziphatha ngokucacisa ngokushesha i-ID 0, ngaphandle kwenketho I-COUNT. Sizobona umlayezo owodwa olindile, okungukuthi, umlayezo we-apula:

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

Nokho, uma siqinisekisa ukuthi umlayezo ucutshungulwe ngempumelelo, ngeke usaboniswa:

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

Manje sekuyithuba likaBob lokufunda okuthile:

> 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"

U-Bob, oyilungu leqembu lami, akacelanga imilayezo engaphezu kwemibili. Umyalo ubika kuphela imilayezo engalethiwe ngenxa yesikhombi esikhethekile ">". Njengoba ubona, umlayezo othi "i-apula" ngeke uboniswe njengoba usuvele ulethiwe ku-Alice, ngakho u-Bob uthola "iwolintshi" kanye "nesitrobheli".

Ngale ndlela, u-Alice, u-Bob, nanoma yimuphi omunye obhalisele iqembu bangafunda imilayezo ehlukene ekusakazweni okufanayo. Bangakwazi futhi ukufunda umlando wabo wemilayezo engacutshungulwanga noma bamaka imilayezo njengecutshunguliwe.

Kunezinto ezimbalwa okufanele uzikhumbule:

  • Ngokushesha lapho obhalisile ebheka umlayezo njengomyalo I-XREADGROUP, lo mlayezo ungena esimweni "sokulindile" futhi unikezwe lowo obhalisile othile. Abanye ababhalisile beqembu ngeke bakwazi ukufunda lo mlayezo.
  • Ababhalisile badalwa ngokuzenzakalelayo lapho kukhulunywa ngabo okokuqala, asikho isidingo sokubadala ngokusobala.
  • Ngosizo luka I-XREADGROUP ungafunda imilayezo evela emilukweni eminingi ehlukene ngesikhathi esisodwa, kodwa ukuze lokhu kusebenze udinga ukuthi uqale wakhe amaqembu anegama elifanayo kuchungechunge ngalunye usebenzisa XGROUP

Ukubuyisela ngemva kokwehluleka

Obhalisile angalulama ekuhlulekeni futhi aphinde afunde uhlu lwakhe lwemilayezo ngesimo "esilindile". Nokho, emhlabeni wangempela, ababhalisile bangase bahluleke ekugcineni. Kwenzekani emilayezweni ebambekile yobhalisile uma obhalisile engakwazi ukululama ekwehlulekeni?
I-Consumer Group inikeza isici esisetshenziselwa izimo ezinjalo - lapho udinga ukushintsha umnikazi wemilayezo.

Into yokuqala okudingeka uyenze ukushayela umyalo XPENDING, ebonisa yonke imilayezo eqenjini enesimo esithi "isalindile". Ngendlela elula kakhulu, umyalo ubizwa ngezimpikiswano ezimbili kuphela: igama lentambo negama leqembu:

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

Ithimba libonise inombolo yemilayezo engacutshunguliwe yalo lonke iqembu kanye nobhalisile ngamunye. Sino-Bob kuphela onemilayezo emibili evelele ngoba umyalezo kuphela u-Alice awucelile waqinisekiswa ngawo XACK.

Singacela ulwazi olwengeziwe sisebenzisa izimpikiswano ezengeziwe:

XPENDING {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]
{start-id} {end-id} - ububanzi bezihlonzi (ungasebenzisa okuthi “-” kanye “+”)
{count} — inombolo yemizamo yokulethwa
{consumer-name} - igama leqembu

> 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

Manje sinemininingwane yomlayezo ngamunye: I-ID, igama lobhalisile, isikhathi sokungenzi lutho ngama-millisecond futhi ekugcineni inani lemizamo yokulethwa. Sinemilayezo emibili evela ku-Bob futhi ibingasebenzi ama-millisecond angu-74170458, cishe amahora angu-20.

Sicela uqaphele ukuthi akekho osivimbayo ekuhloleni ukuthi okuqukethwe ngumlayezo bekuwukusebenzisa nje XRANGE.

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

Kufanele nje siphinde isihlonzi esifanayo kabili kuma-agumenti. Manje njengoba sesinombono othile, u-Alice angase anqume ukuthi ngemva kwamahora angu-20 esikhathi sokuphumula, u-Bob cishe ngeke alulame, futhi sekuyisikhathi sokubuza leyo milayezo futhi uqalise kabusha ukuyicubungula u-Bob. Kulokhu sisebenzisa umyalo XCLAIM:

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

Ngokusebenzisa lo myalo, singathola umlayezo “wangaphandle” ongakacutshungulwa ngokushintsha umnikazi abe ngu-{consumer}. Nokho, singase futhi sinikeze ubuncane besikhathi sokungenzi lutho {min-idle-time}. Lokhu kusiza ukugwema isimo lapho amaklayenti amabili ezama ukushintsha ngesikhathi esisodwa umnikazi wemilayezo efanayo:

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

Ikhasimende lokuqala lizosetha kabusha isikhathi sokuphumula futhi likhulise ikhawunta yokulethwa. Ngakho iklayenti lesibili ngeke likwazi ukuyicela.

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

Umlayezo ufunwe ngempumelelo ngu-Alice, osengakwazi manje ukucubungula umlayezo futhi awuvume.

Kusukela kulesi sibonelo esingenhla, ungabona ukuthi isicelo esiphumelele sibuyisela okuqukethwe komlayezo ngokwawo. Nokho, lokhu akudingekile. Inketho ye-JUSTID ingasetshenziselwa ukubuyisela ama-ID omlayezo kuphela. Lokhu kuyasiza uma ungenantshisekelo emininingwaneni yomlayezo futhi ufuna ukukhulisa ukusebenza kwesistimu.

Ikhawunta yokulethwa

Ikhawunta oyibona kokuphumayo XPENDING inombolo yokulethwa komlayezo ngamunye. Ikhawunta enjalo inyuswa ngezindlela ezimbili: uma umlayezo ucelwe ngempumelelo nge XCLAIM noma uma kusetshenziswa ucingo I-XREADGROUP.

Kuvamile ukuthi imilayezo ethile ilethwe izikhathi eziningi. Into eyinhloko ukuthi yonke imilayezo ekugcineni icutshungulwa. Kwesinye isikhathi kuba nezinkinga lapho kucutshungulwa umlayezo ngenxa yokuthi umlayezo ngokwawo wonakalisiwe, noma ukucubungula umlayezo kubangela iphutha kukhodi yesibambi. Kulokhu, kungase kuvele ukuthi akekho ozokwazi ukucubungula lo mlayezo. Njengoba sinekhawunta yokuzama ukulethwa, singasebenzisa lesi sibali ukuthola izimo ezinjalo. Ngakho-ke, uma isibalo sokulethwa sifinyelela inombolo ephezulu oyicacisayo, cishe kungaba ukuhlakanipha ukubeka umlayezo onjalo kolunye uchungechunge bese uthumela isaziso kumphathi wesistimu.

I-Tread State

Ithimba XINFO esetshenziselwa ukucela ulwazi oluhlukahlukene mayelana nentambo kanye namaqembu ayo. Isibonelo, umyalo oyisisekelo ubukeka kanjena:

> 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"

Umyalo ongenhla ubonisa ulwazi olujwayelekile mayelana nokusakaza okucacisiwe. Manje isibonelo esiyinkimbinkimbi kakhudlwana:

> 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

Umyalo ongenhla ubonisa ulwazi olujwayelekile kuwo wonke amaqembu ochungechunge olushiwo

> 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

Umyalo ongenhla ubonisa ulwazi lwabo bonke ababhalisile bokusakaza okushiwo kanye neqembu.
Uma ukhohlwa i-syntax yomyalo, vele ubuze umyalo ngokwawo ukuze uthole usizo:

> 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.

Umkhawulo Wosayizi Wokusakaza

Izinhlelo zokusebenza eziningi azifuni ukuqoqa idatha ekusakazweni unomphela. Ngokuvamile kuyasiza ukuba nenani eliphakeme lemilayezo evunyelwe uchungechunge ngalunye. Kwezinye izimo, kuyasiza ukususa yonke imilayezo isuka ochungechungeni iye kwesinye isitolo esiphikelelayo lapho usayizi oshiwo ufinyelelwa. Ungakwazi ukukhawulela usayizi wokusakaza usebenzisa ipharamitha engu-MAXLEN kumyalo I-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"

Uma usebenzisa i-MAXLEN, amarekhodi amadala asuswa ngokuzenzakalelayo lapho efinyelela ubude obucacisiwe, ngakho ukusakaza kunosayizi ongashintshi. Kodwa-ke, ukuthena kulokhu akwenzeki ngendlela ephumelela kakhulu kwinkumbulo ye-Redis. Ungasithuthukisa isimo ngendlela elandelayo:

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

I-agumenti engu-~ esibonelweni esingenhla isho ukuthi asikho isidingo sokukhawulela ubude bokusakaza enanini elithile. Esibonelweni sethu, lokhu kungaba yinoma iyiphi inombolo enkulu noma elingana no-1000 (isibonelo, 1000, 1010, noma 1030). Sisanda kucacisa ukuthi sifuna ukusakaza kwethu kugcine okungenani amarekhodi ayi-1000. Lokhu kwenza ukuphathwa kwememori kusebenze kahle kakhulu ngaphakathi kweRedis.

Kukhona neqembu elihlukene I-XTRIM, eyenza into efanayo:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

Ukugcinwa okuqhubekayo nokuphindaphinda

I-Redis Stream iphindaphindwa ngokulinganayo kumanodi ezinceku futhi ilondolozwe kumafayela afana ne-AOF (isifinyezo sayo yonke idatha) kanye ne-RDB (ilogi yayo yonke imisebenzi yokubhala). Ukuphindwaphindwa kwesimo Samaqembu Abathengi nakho kuyasekelwa. Ngakho-ke, uma umlayezo usesimweni "sokulindiwe" ku-master node, khona-ke kumanodi wesigqila lo mlayezo uzoba nesimo esifanayo.

Isusa izici ezingazodwana ekusakazweni

Kukhona umyalo okhethekile wokususa imilayezo XDEL. Umyalo uthola igama lochungechunge olulandelwa ama-ID omlayezo okufanele asuswe:

> 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"

Uma usebenzisa lo myalo, udinga ukunaka ukuthi inkumbulo yangempela ngeke ikhishwe ngokushesha.

Ubude bemifudlana enguziro

Umehluko phakathi kwemifudlana nezinye izakhiwo zedatha ye-Redis ukuthi lapho ezinye izakhiwo zedatha zingasenazo izici ngaphakathi kwazo, njengomphumela oseceleni, isakhiwo sedatha ngokwaso sizosuswa kumemori. Ngakho-ke, ngokwesibonelo, isethi ehleliwe izosuswa ngokuphelele lapho ikholi ye-ZREM isusa isici sokugcina. Esikhundleni salokho, imicu ivunyelwe ukuhlala enkumbulweni ngisho nangaphandle kokuba nama-elementi ngaphakathi.

isiphetho

I-Redis Stream ilungele ukudala abadayisi bemiyalezo, imigqa yemilayezo, ukugawulwa kwemithi okuhlangene, nezinhlelo zezingxoxo ezigcina umlando.

Njengoba ngake ngasho U-Niklaus Wirth, izinhlelo zingama-algorithms kanye nezakhiwo zedatha, futhi i-Redis isivele ikunikeza kokubili.

Source: www.habr.com

Engeza amazwana