Redis Stream - iontaofacht agus inscálaitheacht do chórais teachtaireachtaí

Redis Stream - iontaofacht agus inscálaitheacht do chórais teachtaireachtaí

Is cineál nua sonraí teibí é Redis Stream a tugadh isteach in Redis le leagan 5.0
Go coincheapúil, is Liosta é Redis Stream ar féidir leat iontrálacha a chur leis. Tá aitheantóir uathúil ag gach iontráil. De réir réamhshocraithe, gintear an ID go huathoibríoch agus cuimsíonn sé stampa ama. Mar sin, is féidir leat raonta taifead a cheistiú le himeacht ama, nó sonraí nua a fháil de réir mar a thagann sé isteach sa sruth, cosúil le hordú Unix "eireaball -f" a léann comhad loga agus a reo agus é ag fanacht le sonraí nua. Tabhair faoi deara gur féidir le cliaint iolracha éisteacht le snáithe ag an am céanna, díreach mar is féidir le go leor próisis "eireaball -f" comhad a léamh ag an am céanna gan teacht salach ar a chéile.

Chun na buntáistí uile a bhaineann leis an gcineál sonraí nua a thuiscint, déanaimis féachaint go tapa ar na struchtúir Redis atá ann cheana féin a mhacasamhlú go páirteach ar fheidhmiúlacht Redis Stream.

Redis PUB/SUB

Is córas simplí teachtaireachtaí é Redis Pub/Sub atá curtha isteach i do stór eochairluacha cheana féin. Mar sin féin, tá costas ag baint le simplíocht:

  • Má theipeann ar an bhfoilsitheoir ar chúis éigin, ansin cailleann sé a shíntiúsóirí go léir
  • Ní mór go mbeadh a fhios ag an bhfoilsitheoir seoladh cruinn a shíntiúsóirí go léir
  • Féadfaidh foilsitheoir an iomarca oibre a dhéanamh ar a shíntiúsóirí má fhoilsítear sonraí níos tapúla ná mar a phróiseáiltear iad
  • Scriostar an teachtaireacht ó mhaolán an fhoilsitheora díreach i ndiaidh foilsithe, is cuma cé mhéad síntiúsóir a seachadadh í agus cé chomh tapa agus a bhí siad in ann an teachtaireacht seo a phróiseáil.
  • Gheobhaidh gach síntiúsóir an teachtaireacht ag an am céanna. Ní mór do shíntiúsóirí iad féin a aontú ar bhealach éigin eatarthu féin ar an ord ina bpróiseálfar an teachtaireacht chéanna.
  • Níl aon mheicníocht ionsuite ann chun a dhearbhú gur éirigh le sínitheoir teachtaireacht a phróiseáil. Má fhaigheann síntiúsóir teachtaireacht agus má thuairteanna le linn próiseála, ní bheidh an foilsitheoir ar an eolas faoi.

Liosta Redis

Is struchtúr sonraí é Redis List a thacaíonn le blocáil orduithe léite. Is féidir leat teachtaireachtaí a chur leis agus a léamh ó thús nó deireadh an liosta. Bunaithe ar an struchtúr seo, is féidir leat stack nó scuaine maith a dhéanamh do do chóras dáilte, agus i bhformhór na gcásanna beidh sé seo go leor. Príomhdhifríochtaí ó Redis Pub/Fo:

  • Seoltar an teachtaireacht chuig cliant amháin. Gheobhaidh an chéad chliant atá blocáilte léite na sonraí ar dtús.
  • Ní mór do Clint an oibríocht léite a thionscnamh do gach teachtaireacht é féin. Níl a fhios ag an liosta rud ar bith faoi chliaint.
  • Stóráiltear teachtaireachtaí go dtí go léann duine éigin iad nó go scriosann sé go sainráite iad. Má chumraíonn tú an freastalaí Redis chun sonraí a shruthlú go diosca, méadóidh iontaofacht an chórais go mór.

Réamhrá don Sruth

Ag cur iontráil le sruth

Foireann XADD cuireann sé iontráil nua leis an sruth. Ní sreang amháin atá i dtaifead, tá sé comhdhéanta de phéire eochairluacha amháin nó níos mó. Mar sin, tá gach iontráil struchtúrtha cheana féin agus cosúil le struchtúr comhaid CSV.

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

Sa sampla thuas, cuirimid dhá réimse leis an sruth leis an ainm (eochair) “mystream”: “sensor-id” agus “teocht” leis na luachanna “1234” agus “19.8”, faoi seach. Mar an dara argóint, glacann an t-ordú aitheantóir a shannfar don iontráil - aithníonn an t-aitheantóir seo go huathúil gach iontráil sa sruth. Mar sin féin, sa chás seo ritheamar * toisc go dteastaíonn uainn go ndéanfadh Redis ID nua a ghiniúint dúinn. Méadóidh gach ID nua. Mar sin, beidh aitheantóir níos airde ag gach iontráil nua i gcomparáid le hiontrálacha roimhe seo.

Formáid aitheantóra

An t-aitheantas iontrála ar ais ag an ordú XADD, comhdhéanta de dhá chuid:

{millisecondsTime}-{sequenceNumber}

milleasoicindíAm - Am Unix i milleasoicindí (am freastalaí Redis). Mar sin féin, má tá an t-am reatha mar an gcéanna nó níos lú ná am an taifeadta roimhe seo, ansin úsáidtear stampa ama an taifeadta roimhe seo. Mar sin, má théann am an fhreastalaí siar in am, coinneoidh an t-aitheantóir nua an mhaoin incriminte fós.

seicheamhUimhir a úsáidtear le haghaidh taifead a cruthaíodh sa milleasoicind céanna. seicheamhUimhir a mhéadú faoi 1 i gcomparáid leis an iontráil roimhe seo. Toisc go bhfuil an seicheamhUimhir 64 giotán i méid, ansin i ndáiríre níor chóir duit teorainn a chur le líon na dtaifead is féidir a ghiniúint laistigh d'aon milleasoicind amháin.

D'fhéadfadh cuma aisteach a bheith ar fhormáid na n-aitheantóirí sin ar an gcéad amharc. B’fhéidir go n-iontas ar léitheoir mímhuiníneach cén fáth a bhfuil am mar chuid den aitheantóir. Is é an chúis atá leis ná go dtacaíonn sruthanna Redis le fiosrúcháin raon trí ID. Toisc go bhfuil baint ag an aitheantóir leis an am a cruthaíodh an taifead, is féidir raonta ama a cheistiú. Breathnóimid ar shampla ar leith nuair a fhéachaimid ar an ordú XRANGE.

Más rud é ar chúis éigin gur gá don úsáideoir a aitheantóir féin a shonrú, a bhaineann, mar shampla, le córas seachtrach éigin, is féidir linn é a chur ar aghaidh chuig an ordú XADD in ionad * mar a thaispeántar thíos:

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

Tabhair faoi deara le do thoil go gcaithfidh tú monatóireacht a dhéanamh ar an incrimint aitheantais tú féin sa chás seo. In ár sampla, is é an t-aitheantóir íosta "0-1", mar sin ní ghlacfaidh an t-ordú aitheantóir eile atá comhionann le nó níos lú ná "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

Líon taifead in aghaidh an tsrutha

Is féidir líon na dtaifead a fháil i sruth ach an t-ordú a úsáid XLEN. Mar shampla, tabharfaidh an t-ordú seo an luach seo a leanas ar ais:

> XLEN somestream
(integer) 2

Ceisteanna raoin - XRANGE agus XREVRANGE

Chun sonraí a iarraidh de réir raoin, ní mór dúinn dhá aitheantóir a shonrú - tús agus deireadh an raoin. Cuimseoidh an raon ar ais na heilimintí go léir, lena n-áirítear na teorainneacha. Tá dhá aitheantóir speisialta ann freisin “-” agus “+”, faoi seach a chiallaíonn an t-aitheantóir is lú (an chéad taifead) agus is mó (taifead deiridh) sa sruth. Liostaeoidh an sampla thíos na hiontrálacha srutha go léir.

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

Tá sraith de dhá eilimint i ngach taifead a sheoltar ar ais: aitheantóir agus liosta de phéirí eochairluacha. Dúirt muid cheana go bhfuil baint ag aitheantóirí taifead le ham. Mar sin, is féidir linn raon tréimhse ama ar leith a iarraidh. Is féidir linn a shonrú san iarratas, áfach, ní an t-aitheantóir iomlán, ach an t-am Unix amháin, gan an chuid a bhaineann le seicheamhUimhir. Socrófar an chuid den aitheantóir atá fágtha ar lár go nialas go huathoibríoch ag tús an raoin agus go dtí an luach is mó is féidir ag deireadh an raoin. Seo thíos sampla de conas is féidir leat raon de dhá milleasoicindí a iarraidh.

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

Níl ach iontráil amháin againn sa raon seo, ach is féidir leis an toradh a chuirtear ar ais a bheith ollmhór i dtacar sonraí fíor. Ar an gcuis XRANGE tacaíonn an rogha COUNT. Tríd an gcainníocht a shonrú, is féidir linn na chéad N taifead a fháil go simplí. Más gá dúinn an chéad N taifead eile (leathanaigh) a fháil, is féidir linn an t-aitheantas deireanach a fuarthas a úsáid, é a mhéadú seicheamhUimhir ag duine agus a iarraidh arís. Breathnaímid ar seo sa sampla seo a leanas. Tosaímid ag cur 10 eilimint le XADD (ag glacadh leis go raibh mo shruth líonta cheana féin le 10 eilimint). Chun an atriall a thosú ag fáil 2 eilimint in aghaidh an ordú, cuirimid tús leis an raon iomlán ach le COUNT cothrom le 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"

Chun leanúint ar aghaidh leis an gcéad dá eilimint eile, ní mór dúinn an t-aitheantas deireanach a fuarthas a roghnú, i.e. 1519073279157-0, agus 1 a chur le seicheamhUimhir.
Is féidir an t-aitheantas mar thoradh air, sa chás seo 1519073279157-1, a úsáid anois mar argóint tús an raoin nua don chéad ghlao eile 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"

Agus mar sin de. Mar gheall ar chastacht XRANGE Is é O(log(N)) chun cuardach a dhéanamh agus ansin O(M) chun eilimintí M a thabhairt ar ais, ansin bíonn gach céim atriallta tapa. Dá bhrí sin, ag baint úsáide as XRANGE is féidir sruthanna a athrá go héifeachtach.

Foireann XREVRANGE is comhionann XRANGE, ach cuireann sé na heilimintí ar ais in ord droim ar ais:

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

Tabhair faoi deara go bhfuil an t-ordú XREVRANGE Bíonn raon argóintí tús agus stop in ord droim ar ais.

Léamh iontrálacha nua ag baint úsáide as XREAD

Is minic a bhíonn an tasc chun síntiús a íoc le sruth agus a fháil ach teachtaireachtaí nua. Féadfaidh an coincheap seo a bheith cosúil le Redis Pub/Fo nó ag cur bac ar Redis List, ach tá difríochtaí bunúsacha ann maidir le conas Sruth Redis a úsáid:

  1. Seachadtar gach teachtaireacht nua chuig gach síntiúsóir de réir réamhshocraithe. Tá an iompar seo difriúil ó Liosta Redis blocála, áit nach léifidh ach síntiúsóir amháin teachtaireacht nua.
  2. Cé go ndéantar dearmad ar gach teachtaireacht i dTeach Tábhairne/Fo-Thábhairne Redis agus ní leantar leo riamh, sa Stream coinnítear gach teachtaireacht ar feadh tréimhse éiginnte (ach amháin má dhéanann an cliant go sainráite é a scriosadh).
  3. Ligeann Redis Stream duit rochtain ar theachtaireachtaí laistigh de shruth amháin a dhifreáil. Ní féidir le sínitheoir ar leith ach stair a dteachtaireachtaí pearsanta a fheiceáil.

Is féidir leat síntiús a íoc le snáithe agus teachtaireachtaí nua a fháil ag baint úsáide as an ordú XREAD. Tá sé beagán níos casta ná XRANGE, mar sin cuirfimid tús leis na samplaí níos simplí ar dtús.

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

Taispeánann an sampla thuas foirm neamh-bhloic XREAD. Tabhair faoi deara go bhfuil an rogha COUNT roghnach. Go deimhin, is é an t-aon rogha ordaithe atá ag teastáil ná an rogha STREAMS, a shonraíonn liosta sruthanna mar aon leis an uas-aitheantóir comhfhreagrach. Scríobhamar “STREAMS mystream 0” - ba mhaith linn gach taifead den sruth mystream a fháil le haitheantóir níos mó ná “0-0”. Mar a fheiceann tú ón sampla, filleann an t-ordú ainm an tsnáithe mar is féidir linn síntiús a íoc le snáitheanna iolracha ag an am céanna. D’fhéadfaimis scríobh, mar shampla, “STREAMS mystream otherstream 0 0”. Tabhair faoi deara le do thoil go gcaithfimid ainmneacha na sruthanna go léir a theastaíonn a sholáthar ar dtús tar éis an rogha SREAMS agus gan ach ansin liosta aitheantóirí.

Sa fhoirm shimplí seo ní dhéanann an t-ordú aon rud speisialta i gcomparáid le XRANGE. Mar sin féin, is é an rud suimiúil gur féidir linn casadh go héasca XREAD chuig ordú blocála, ag sonrú an argóint BLOCK:

> XREAD BLOCK 0 STREAMS mystream $

Sa sampla thuas, sonraítear rogha BLOC nua le teorainn ama de 0 milleasoicind (ciallaíonn sé seo fanacht ar feadh tréimhse éiginnte). Ina theannta sin, in ionad an gnáth-aitheantóir a rith don sruth mystream, ritheadh ​​aitheantóir speisialta $. Ciallaíonn an t-aitheantóir speisialta seo XREAD caithfidh sé an t-uas-aitheantóir i mystream a úsáid mar an t-aitheantóir. Mar sin ní bhfaighidh muid ach teachtaireachtaí nua ag tosú ón nóiméad a thosaigh muid ag éisteacht. Ar roinnt bealaí tá sé seo cosúil leis an ordú Unix "eireaball -f".

Tabhair faoi deara, agus an rogha BLOCK á úsáid againn nach gá go n-úsáidfimid an t-aitheantóir speisialta $. Is féidir linn aon aitheantóir atá sa sruth a úsáid. Más féidir leis an bhfoireann ár n-iarratas a sheirbhísiú láithreach gan bac a chur, déanfaidh sé amhlaidh, ar shlí eile cuirfidh sé bac ar.

Ag bacadh XREAD Is féidir éisteacht freisin le snáitheanna éagsúla ag an am céanna, is gá duit ach a shonrú a n-ainmneacha. Sa chás seo, cuirfidh an t-ordú taifead ar ais ar an gcéad sruth a fuair sonraí. Gheobhaidh an chéad síntiúsóir a gcuirtear bac air le haghaidh snáithe áirithe sonraí ar dtús.

Grúpaí Tomhaltóirí

I dtascanna áirithe, ba mhaith linn teorainn a chur le rochtain suibscríobhaí ar theachtaireachtaí laistigh d'aon snáithe amháin. Sampla ina bhféadfadh sé seo a bheith úsáideach is ea scuaine teachtaireachtaí le hoibrithe a gheobhaidh teachtaireachtaí éagsúla ó snáithe, rud a fhágann gur féidir teachtaireachtaí a phróiseáil de réir scála.

Má shamhlaímid go bhfuil trí shíntiúsóir C1, C2, C3 againn agus snáithe ina bhfuil teachtaireachtaí 1, 2, 3, 4, 5, 6, 7, ansin déanfar na teachtaireachtaí a sheirbheáil mar atá sa léaráid thíos:

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

Chun an éifeacht seo a bhaint amach, úsáideann Redis Stream coincheap ar a dtugtar Consumer Group. Tá an coincheap seo cosúil le suibscríobhaí bréagach, a fhaigheann sonraí ó shruth, ach a fhreastalaíonn ar shíntiúsóirí iolracha laistigh de ghrúpa i ndáiríre, ag soláthar ráthaíochtaí áirithe:

  1. Seachadtar gach teachtaireacht chuig síntiúsóir eile laistigh den ghrúpa.
  2. Laistigh de ghrúpa, sainaithnítear síntiúsóirí faoina n-ainm, ar teaghrán cás-íogair é. Má thiteann suibscríobhaí amach as an ngrúpa go sealadach, is féidir é a chur ar ais sa ghrúpa ag baint úsáide as a ainm uathúil féin.
  3. Cloíonn gach Grúpa Tomhaltóirí an coincheap “an chéad teachtaireacht neamhléite”. Nuair a iarrann síntiúsóir teachtaireachtaí nua, ní féidir leis ach teachtaireachtaí a fháil nár seachadadh riamh cheana chuig aon síntiúsóir laistigh den ghrúpa.
  4. Tá ordú ann a dheimhniú go sainráite gur éirigh leis an sínitheoir an teachtaireacht a phróiseáil. Go dtí go nglaofar an t-ordú seo, fanfaidh an teachtaireacht iarrtha sa stádas "ar feitheamh".
  5. Laistigh den Ghrúpa Tomhaltóirí, is féidir le gach síntiúsóir stair na dteachtaireachtaí a seachadadh dó, ach nach bhfuil próiseáilte fós a iarraidh (sa stádas “ar feitheamh”)

Ar bhealach, is féidir staid an ghrúpa a chur in iúl mar seo a leanas:

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

Anois tá sé in am dul i dtaithí ar na príomhorduithe don Ghrúpa Tomhaltóirí, mar atá:

  • XGROUP a úsáidtear chun grúpaí a chruthú, a scrios agus a bhainistiú
  • XREADGROUP a úsáidtear chun sruth a léamh trí ghrúpa
  • XACK - ligeann an t-ordú seo don síntiúsóir an teachtaireacht a mharcáil mar a próiseáladh go rathúil

Grúpa Tomhaltóirí a Chruthú

Glacaimis leis go bhfuil mystream ann cheana féin. Ansin beidh cuma ar an ordú cruthú grúpa mar:

> XGROUP CREATE mystream mygroup $
OK

Agus grúpa á chruthú, ní mór dúinn aitheantóir a chur ar aghaidh, as a bhfaighidh an grúpa teachtaireachtaí. Más mian linn gach teachtaireacht nua a fháil, is féidir linn an t-aitheantóir speisialta $ a úsáid (mar atá inár sampla thuas). Má shonraíonn tú 0 in ionad aitheantóra speisialta, beidh gach teachtaireacht sa snáithe ar fáil don ghrúpa.

Anois go bhfuil an grúpa cruthaithe, is féidir linn tosú láithreach ag léamh teachtaireachtaí ag baint úsáide as an ordú XREADGROUP. Tá an t-ordú seo an-chosúil le XREAD agus tacaíonn sé leis an rogha roghnach BLOC. Mar sin féin, tá rogha GHRÚPA riachtanach ann a chaithfear a shonrú i gcónaí le dhá argóint: ainm an ghrúpa agus ainm an suibscríobhaí. Tacaítear leis an rogha COUNT freisin.

Sula léann tú an snáithe, cuirimis roinnt teachtaireachtaí ann:

> 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

Anois déanaimis iarracht an sruth seo a léamh tríd an ngrúpa:

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

Léann an t-ordú thuas focal ar fhocal mar seo a leanas:

“Ba mhaith liomsa, an síntiúsóir Alice, ball den mygroup, teachtaireacht amháin a léamh ó mystream nár seachadadh do dhuine ar bith riamh roimhe seo.”

Gach uair a dhéanann síntiúsóir oibríocht ar ghrúpa, ní mór dó a ainm a sholáthar, agus é féin á aithint laistigh den ghrúpa go sainiúil. Tá sonraí an-tábhachtach amháin san ordú thuas - an t-aitheantóir speisialta">". Déanann an t-aitheantóir speisialta seo teachtaireachtaí a scagadh, ag fágáil ach iad siúd nár seachadadh riamh cheana.

Chomh maith leis sin, i gcásanna speisialta, is féidir leat aitheantóir fíor a shonrú ar nós 0 nó aon aitheantóir bailí eile. Sa chás seo an t-ordú XREADGROUP seolfar stair na dteachtaireachtaí ar ais chugat le stádas "ar feitheamh" a seachadadh chuig an sínitheoir sonraithe (Alice) ach nár admhaíodh fós leis an ordú XACK.

Is féidir linn an t-iompar seo a thástáil tríd an ID 0 a shonrú láithreach, gan an rogha LÍON. Ní fheicfimid ach teachtaireacht amháin ar feitheamh, is é sin, an teachtaireacht úll:

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

Mar sin féin, má dheimhnímid go bhfuil an teachtaireacht próiseáilte go rathúil, ní thaispeánfar í a thuilleadh:

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

Anois tá seal ag Bob rud éigin a léamh:

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

D'iarr Bob, ball de mo ghrúpa, gan níos mó ná dhá theachtaireacht. Ní thuairiscíonn an t-ordú ach teachtaireachtaí neamhsheachadta mar gheall ar an aitheantóir speisialta">". Mar a fheiceann tú, ní thaispeánfar an teachtaireacht "úll" ós rud é go bhfuil sé seachadta cheana féin chuig Alice, mar sin faigheann Bob "oráiste" agus "sútha talún".

Ar an mbealach seo, is féidir le Alice, Bob, agus aon síntiúsóir eile don ghrúpa teachtaireachtaí éagsúla a léamh ón sruth céanna. Is féidir leo freisin a stair teachtaireachtaí neamhphróiseáilte a léamh nó teachtaireachtaí a mharcáil mar a phróiseáiltear iad.

Tá cúpla rud le coinneáil i gcuimhne:

  • Chomh luath agus a mheasann an suibscríobhaí an teachtaireacht a bheith ina ordú XREADGROUP, téann an teachtaireacht seo isteach sa stát “ar feitheamh” agus sanntar í don síntiúsóir sonrach sin. Ní bheidh sínitheoirí grúpa eile in ann an teachtaireacht seo a léamh.
  • Cruthaítear síntiúsóirí go huathoibríoch ar an gcéad lua, ní gá iad a chruthú go sainráite.
  • Le XREADGROUP is féidir leat teachtaireachtaí ó iliomad snáitheanna éagsúla a léamh ag an am céanna, ach le go n-oibreoidh tú ní mór duit grúpaí a chruthú ar dtús leis an ainm céanna do gach snáithe ag baint úsáid as XGROUP

Aisghabháil tar éis teip

Is féidir leis an suibscríobhaí a ghnóthú ón teip agus a athléamh a liosta de na teachtaireachtaí leis an stádas "ar feitheamh". Mar sin féin, sa saol fíor, d'fhéadfadh go dteipeann ar shíntiúsóirí ar deireadh thiar. Cad a tharlaíonn do theachtaireachtaí bhfostú suibscríobhaí mura bhfuil an suibscríobhaí in ann aisghabháil ó theip?
Tugann Grúpa Tomhaltóirí gné a úsáidtear le haghaidh cásanna den sórt sin amháin - nuair is gá duit úinéir teachtaireachtaí a athrú.

Is é an chéad rud is gá duit a dhéanamh glaoch ar an ordú XPENDING, a thaispeánann gach teachtaireacht sa ghrúpa leis an stádas “ar feitheamh”. San fhoirm is simplí, tugtar an t-ordú gan ach dhá argóint: an t-ainm snáithe agus an t-ainm grúpa:

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

Thaispeáin an fhoireann líon na dteachtaireachtaí neamhphróiseáilte don ghrúpa iomlán agus do gach síntiúsóir. Níl ach dhá theachtaireacht gan réiteach ag Bob toisc gur deimhníodh an t-aon teachtaireacht a d’iarr Alice XACK.

Is féidir linn tuilleadh faisnéise a iarraidh trí úsáid a bhaint as tuilleadh argóintí:

XPENDING {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]
{start-id} {end-id} - raon aitheantóirí (is féidir leat “-” agus “+”) a úsáid
{count} — líon na n-iarrachtaí seachadta
{tomhaltóir-ainm} - ainm an ghrúpa

> 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

Anois tá sonraí againn maidir le gach teachtaireacht: ID, ainm suibscríobhaí, am díomhaoin sna milleasoicindí agus ar deireadh líon na n-iarrachtaí seachadta. Tá dhá theachtaireacht againn ó Bob agus tá siad díomhaoin ar feadh 74170458 milleasoicindí, thart ar 20 uair an chloig.

Tabhair faoi deara le do thoil nach bhfuil aon duine ag cur bac orainn a sheiceáil cad a bhí sa teachtaireacht go simplí trí úsáid a bhaint as XRANGE.

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

Níl le déanamh againn ach an t-aitheantóir céanna a dhéanamh arís faoi dhó sna hargóintí. Anois agus tuairim éigin againn, b’fhéidir go gcinnfeadh Alice, tar éis 20 uair an chloig de downtime, gur dócha nach dtiocfaidh biseach ar Bob, agus tá sé in am na teachtaireachtaí sin a cheistiú agus iad a phróiseáil arís do Bob. Chun seo a úsáid againn an t-ordú XCLAIM:

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

Ag baint úsáide as an ordú seo, is féidir linn teachtaireacht “eachtrannach” a fháil nach bhfuil próiseáilte fós tríd an úinéir a athrú go {tomhaltóir}. Mar sin féin, is féidir linn íosmhéid ama díomhaoin {min-idle-time} a sholáthar freisin. Cuidíonn sé seo le cás a sheachaint ina ndéanann dhá chliaint iarracht úinéir na dteachtaireachtaí céanna a athrú ag an am céanna:

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

Athshocróidh an chéad chustaiméir an t-am aga neamhfhónaimh agus méadóidh sé an cuntar seachadta. Mar sin ní bheidh an dara cliant in ann é a iarraidh.

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

D'éiligh Alice an teachtaireacht go rathúil, atá in ann an teachtaireacht a phróiseáil anois agus é a admháil.

Ón sampla thuas, is féidir leat a fheiceáil go dtugann iarratas rathúil ábhar na teachtaireachta féin ar ais. Mar sin féin, níl sé seo riachtanach. Is féidir an rogha JUSTID a úsáid chun aitheantais teachtaireachtaí a sheoladh ar ais amháin. Tá sé seo úsáideach mura bhfuil suim agat i sonraí na teachtaireachta agus más mian leat feidhmíocht an chórais a mhéadú.

Cuntar seachadta

An cuntar a fheiceann tú san aschur XPENDING is é an líon seachadta de gach teachtaireacht. Déantar cuntar den sórt sin a mhéadú ar dhá bhealach: nuair a iarrtar teachtaireacht go rathúil trí XCLAIM nó nuair a úsáidtear glao XREADGROUP.

Is gnách go seachadtar roinnt teachtaireachtaí go minic. Is é an rud is mó ná go ndéantar gach teachtaireacht a phróiseáil sa deireadh. Uaireanta tarlaíonn fadhbanna nuair a bhíonn teachtaireacht á phróiseáil toisc go bhfuil an teachtaireacht féin truaillithe, nó go mbíonn earráid sa chód láimhseála mar thoradh ar phróiseáil na teachtaireachta. Sa chás seo, d'fhéadfadh sé tarlú nach mbeidh aon duine in ann an teachtaireacht seo a phróiseáil. Ós rud é go bhfuil cuntar iarracht seachadta againn, is féidir linn an cuntar seo a úsáid chun cásanna den sórt sin a bhrath. Mar sin, a luaithe a shroicheann an comhaireamh seachadta an líon ard a shonraíonn tú, is dócha go mbeadh sé níos críonna teachtaireacht den sórt sin a chur ar shnáithe eile agus fógra a sheoladh chuig riarthóir an chórais.

Stát Snáithe

Foireann XINFO a úsáidtear chun faisnéis éagsúla a iarraidh faoi snáithe agus a ghrúpaí. Mar shampla, tá cuma mar seo ar bhunordú:

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

Taispeánann an t-ordú thuas faisnéis ghinearálta faoin sruth sonraithe. Sampla beagán níos casta anois:

> 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

Taispeánann an t-ordú thuas faisnéis ghinearálta do gach grúpa den snáithe sonraithe

> 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

Taispeánann an t-ordú thuas faisnéis do gach síntiúsóir den sruth sonraithe agus sa ghrúpa sonraithe.
Má dhéanann tú dearmad ar chomhréir na n-orduithe, níl le déanamh ach cabhair a iarraidh ar an ordú féin:

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

Teorainn Méid Srutha

Níl go leor feidhmchlár ag iarraidh sonraí a bhailiú i sruth go deo. Is minic a bhíonn sé úsáideach uaslíon na dteachtaireachtaí a cheadaítear in aghaidh an tsnáithe. I gcásanna eile, tá sé úsáideach gach teachtaireacht a aistriú ó snáithe go stór leanúnach eile nuair a shroichtear an méid snáithe sonraithe. Is féidir leat méid an tsrutha a theorannú trí úsáid a bhaint as an bparaiméadar MAXLEN san ordú 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"

Agus MAXLEN á n-úsáid, scriostar seantaifid go huathoibríoch nuair a shroicheann siad fad sonraithe, agus mar sin tá méid tairiseach ag an sruth. Mar sin féin, ní tharlaíonn bearradh sa chás seo ar an mbealach is éifeachtaí i gcuimhne Redis. Is féidir leat an scéal a fheabhsú mar seo a leanas:

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

Ciallaíonn an argóint ~ sa sampla thuas nach gá dúinn fad an tsrutha a theorannú go luach ar leith. Inár sampla, d'fhéadfadh sé seo a bheith ar aon uimhir níos mó ná nó cothrom le 1000 (mar shampla, 1000, 1010, nó 1030). Shonraigh muid go soiléir go dteastaíonn uainn go stórálfadh ár sruth 1000 taifead ar a laghad. Déanann sé seo bainistíocht cuimhne i bhfad níos éifeachtaí taobh istigh de Redis.

Tá foireann ar leith ann freisin XTRIM, a dhéanann an rud céanna:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

Stóráil agus macasamhlú marthanach

Déantar Redis Stream a mhacasamhlú go neamhshioncronach chuig nóid sclábhaithe agus é a shábháil ar chomhaid cosúil le AOF (pictiúr ar na sonraí go léir) agus RDB (logóg de gach oibríocht scríbhneoireachta). Tacaítear freisin le macasamhlú stáit na nGrúpaí Tomhaltóirí. Mar sin, má tá teachtaireacht sa stádas “ar feitheamh” ar an máistir nód, ansin ar na nóid sclábhaithe beidh an stádas céanna ag an teachtaireacht seo.

Eilimintí aonair a bhaint as sruth

Tá ordú speisialta ann chun teachtaireachtaí a scriosadh XDEL. Faigheann an t-ordú ainm an tsnáithe agus na haitheantais teachtaireachta atá le scriosadh ina dhiaidh:

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

Agus an t-ordú seo á úsáid agat, ní mór duit a chur san áireamh nach scaoilfear an chuimhne iarbhír láithreach.

Sruthanna fad nialais

Is é an difríocht idir sruthanna agus struchtúir sonraí eile Redis ná nuair nach bhfuil gnéithe laistigh díobh a thuilleadh ag struchtúir sonraí eile, mar fho-iarmhairt, bainfear an struchtúr sonraí féin ón gcuimhne. Mar sin, mar shampla, bainfear an tacar sórtáilte go hiomlán nuair a bhainfidh an glao ZREM an eilimint dheireanach. Ina áit sin, ceadaítear snáitheanna fanacht sa chuimhne fiú gan aon eilimintí taobh istigh.

Conclúid

Tá Redis Stream an-oiriúnach chun bróicéirí teachtaireachta, scuainí teachtaireachta, logáil aontaithe, agus córais comhrá staire a chruthú.

Mar a dúirt mé uair amháin Niklaus Wirth, is halgartaim iad cláir móide struchtúir sonraí, agus tugann Redis an dá cheann duit cheana féin.

Foinse: will.com

Add a comment