Redis Stream - dogaro da daidaita tsarin saƙon ku

Redis Stream - dogaro da daidaita tsarin saƙon ku

Redis Stream shine sabon nau'in bayanan da aka gabatar a cikin Redis tare da sigar 5.0
A zahiri, Redis Stream Jerin ne wanda zaku iya ƙara shigarwar zuwa gare shi. Kowace shigarwa tana da mai ganowa na musamman. Ta hanyar tsoho, ana ƙirƙira ID ta atomatik kuma ya haɗa da tambarin lokaci. Don haka, zaku iya bincika jeri na bayanai akan lokaci, ko karɓar sabbin bayanai yayin da suke isowa cikin rafi, kamar yadda umarnin Unix "tail -f" ke karanta fayil ɗin log kuma yana daskare yayin jiran sabbin bayanai. Lura cewa abokan ciniki da yawa za su iya sauraron zaren lokaci guda, kamar yadda yawancin matakan "wutsiya -f" za su iya karanta fayil a lokaci guda ba tare da cin karo da juna ba.

Don fahimtar duk fa'idodin sabon nau'in bayanan, bari mu yi saurin duba tsarin Redis ɗin da aka daɗe wanda ke yin kwafin ayyukan Redis Stream.

Redis PUB/SUB

Redis Pub/Sub shine tsarin saƙo mai sauƙi wanda aka riga aka gina shi a cikin kantin sayar da ƙimar ku. Koyaya, sauƙi yana zuwa akan farashi:

  • Idan mawallafin saboda wasu dalilai ya kasa, to ya rasa duk masu biyan kuɗi
  • Mawallafin yana buƙatar sanin ainihin adireshin duk masu biyan kuɗi
  • Mawallafin yana iya yin lodin masu biyan kuɗi da aiki idan an buga bayanai da sauri fiye da yadda ake sarrafa su
  • Ana share saƙon daga madaidaicin mawallafin nan da nan bayan an buga shi, ba tare da la’akari da yawan masu biyan kuɗi da aka isar da shi ba da kuma saurin aiwatar da wannan saƙon.
  • Duk masu biyan kuɗi za su karɓi saƙon a lokaci guda. Dole ne su kansu masu biyan kuɗi su yarda a tsakanin juna akan tsarin sarrafa saƙo ɗaya.
  • Babu wani ginanniyar hanyar da za ta tabbatar da cewa mai biyan kuɗi ya yi nasarar sarrafa saƙo. Idan mai biyan kuɗi ya karɓi saƙo kuma ya faɗo yayin sarrafawa, mawallafin ba zai san game da shi ba.

Jerin Lissafi

Jerin Redis shine tsarin bayanai wanda ke goyan bayan toshe umarnin karantawa. Kuna iya ƙarawa da karanta saƙonni daga farkon ko ƙarshen lissafin. Dangane da wannan tsarin, zaku iya yin tari mai kyau ko jerin gwano don tsarin rarraba ku, kuma a mafi yawan lokuta wannan zai isa. Babban bambance-bambance daga Redis Pub/Sub:

  • Ana isar da saƙon ga abokin ciniki ɗaya. Abokin ciniki na farko da aka katange zai karɓi bayanan da farko.
  • Clint dole ne ya fara aikin karantawa ga kowane saƙo da kansa. List bai san kome ba game da abokan ciniki.
  • Ana adana saƙonnin har sai wani ya karanta su ko kuma ya share su a sarari. Idan kun saita uwar garken Redis don zubar da bayanai zuwa faifai, to, amincin tsarin yana ƙaruwa sosai.

Gabatarwa zuwa Ruwa

Ƙara shigarwa zuwa rafi

tawagar XAD yana ƙara sabon shigarwa ga rafi. Rikodi ba kawai kirtani ba ne, ya ƙunshi ɗaya ko fiye maɓalli-darajar nau'i-nau'i. Don haka, kowace shigarwa an riga an tsara ta kuma tayi kama da tsarin fayil ɗin CSV.

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

A cikin misalin da ke sama, muna ƙara filayen biyu zuwa rafi tare da sunan (maɓalli) "mystream": "sensor-id" da "zazzabi" tare da ƙimar "1234" da "19.8", bi da bi. A matsayin hujja ta biyu, umarnin yana ɗaukar mai ganowa wanda za a sanya shi zuwa shigarwar - wannan mai ganowa ta keɓance kowace shigarwa a cikin rafi. Koyaya, a wannan yanayin mun wuce * saboda muna son Redis ya samar mana da sabon ID. Kowane sabon ID zai karu. Saboda haka, kowace sabuwar shigarwa za ta sami babban mai ganowa dangane da abubuwan da suka gabata.

Tsarin ganowa

An dawo da ID ɗin shigarwa ta umarnin XAD, ya ƙunshi sassa biyu:

{millisecondsTime}-{sequenceNumber}

millisecondsLokaci - Lokacin Unix a cikin milliseconds (lokacin uwar garken Redis). Koyaya, idan lokacin na yanzu iri ɗaya ne ko ƙasa da lokacin rikodin baya, to ana amfani da tambarin lokutan rikodin da ya gabata. Don haka, idan lokacin uwar garken ya koma cikin lokaci, sabon mai ganowa zai ci gaba da riƙe kayan haɓakawa.

jerin lamba da aka yi amfani da shi don rikodin ƙirƙira a cikin millisecond ɗaya. jerin lamba za a ƙara da 1 dangane da shigarwar da ta gabata. Domin da jerin lamba yana da girman 64 bits, sannan a aikace bai kamata ku shiga iyaka akan adadin bayanan da za a iya samarwa a cikin millisecond ɗaya ba.

Tsarin irin waɗannan masu ganowa na iya zama kamar baƙon abu a kallon farko. Mai karatu mai rashin amana na iya mamakin dalilin da yasa lokaci ya zama wani ɓangare na mai ganowa. Dalili kuwa shine rafukan Redis suna goyan bayan kewayon tambayoyin ta ID. Tun da mai ganowa yana da alaƙa da lokacin da aka ƙirƙiri rikodin, wannan yana ba da damar yin la'akari da jeri na lokaci. Za mu kalli takamaiman misali lokacin da muka kalli umarnin XRANGE.

Idan saboda wasu dalilai mai amfani yana buƙatar ƙayyade nasa mai ganowa, wanda, alal misali, yana da alaƙa da wasu tsarin waje, to zamu iya wuce shi zuwa umarnin. XAD maimakon * kamar yadda aka nuna a kasa:

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

Lura cewa a wannan yanayin dole ne ku sanya ido kan karuwar ID da kanku. A cikin misalinmu, ƙaramin mai ganowa shine "0-1", don haka umarnin ba zai karɓi wani mai ganowa wanda yayi daidai ko ƙasa da "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

Adadin bayanan kowane rafi

Yana yiwuwa a sami adadin rikodin a cikin rafi kawai ta amfani da umarnin XLEN. Misalin mu, wannan umarni zai dawo da ƙimar mai zuwa:

> XLEN somestream
(integer) 2

Tambayoyin Range - XRANGE da XREVRANGE

Don neman bayanai ta kewayo, muna buƙatar tantance masu ganowa guda biyu - farkon da ƙarshen kewayon. Yankin da aka dawo zai ƙunshi duk abubuwa, gami da iyakoki. Hakanan akwai masu ganowa na musamman guda biyu "-" da "+", bi da bi ma'ana mafi ƙanƙanta (rikodi na farko) da mafi girma (rikodi na ƙarshe) a cikin rafi. Misalin da ke ƙasa zai jera duk shigarwar rafi.

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

Kowane rikodin da aka dawo jerin abubuwa ne guda biyu: mai ganowa da jerin maɓalli-darajar nau'i-nau'i. Mun riga mun faɗi cewa masu gano rikodin suna da alaƙa da lokaci. Don haka, muna iya buƙatar kewayon takamaiman lokaci. Koyaya, zamu iya ƙididdigewa a cikin buƙatun ba cikakken mai ganowa ba, amma kawai lokacin Unix, barin ɓangaren da ke da alaƙa. jerin lamba. Za a saita ɓangaren mai ganowa ta atomatik zuwa sifili a farkon kewayon kuma zuwa matsakaicin yuwuwar ƙimar a ƙarshen kewayon. A ƙasa akwai misalin yadda zaku iya buƙatar kewayon millise seconds biyu.

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

Muna da shigarwa ɗaya kawai a cikin wannan kewayon, duk da haka a cikin saitunan bayanan ainihin sakamakon da aka dawo zai iya zama babba. Saboda wannan dalili XRANGE yana goyan bayan zaɓin COUNT. Ta hanyar ƙididdige adadin, za mu iya samun kawai bayanan N na farko. Idan muna buƙatar samun bayanan N na gaba (pagination), za mu iya amfani da ID ɗin da aka karɓa na ƙarshe, ƙara shi jerin lamba ta daya sannan ka sake tambaya. Bari mu kalli wannan a misali na gaba. Mun fara ƙara abubuwa 10 tare da XAD (zaton mystream ya riga ya cika da abubuwa 10). Don fara haɓakar samun abubuwa 2 akan kowane umarni, muna farawa da cikakken kewayon amma tare da COUNT daidai da 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"

Don ci gaba da maimaitawa tare da abubuwa biyu masu zuwa, muna buƙatar zaɓar ID na ƙarshe da aka karɓa, watau 1519073279157-0, kuma ƙara 1 zuwa jerin lamba.
Sakamakon ID, a cikin wannan yanayin 1519073279157-1, yanzu ana iya amfani da shi azaman sabon farkon mahawara don kira na gaba. 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"

Da sauransu. Domin rikitarwa XRANGE shine O (log(N)) don bincika sannan O(M) don dawo da abubuwan M, sannan kowane matakin maimaitawa yana da sauri. Saboda haka, yin amfani da XRANGE za a iya maimaita rafi da inganci.

tawagar KYAUTA daidai yake XRANGE, amma yana mayar da abubuwan da suka biyo baya:

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

Lura cewa umarnin KYAUTA yana ɗaukar mahawara ta fara da tsayawa a baya.

Karanta sabbin shigarwar ta amfani da XREAD

Yawancin lokaci aikin yana tasowa na biyan kuɗi zuwa rafi da karɓar sabbin saƙonni kawai. Wannan ra'ayi na iya zama kama da Redis Pub/Sub ko toshe Jerin Redis, amma akwai bambance-bambance na asali game da yadda ake amfani da Redis Stream:

  1. Ana isar da kowane sabon saƙo ga kowane mai biyan kuɗi ta tsohuwa. Wannan halin ya bambanta da toshe Jerin Redis, inda sabon saƙo ɗaya kawai zai karanta.
  2. Duk da yake a cikin Redis Pub/Sub duk saƙonni ana mantawa da su kuma ba a taɓa dagewa ba, a cikin Stream duk saƙonni ana kiyaye su har abada (sai dai idan abokin ciniki ya haifar da sharewa).
  3. Redis Stream yana ba ku damar bambance damar shiga saƙonni a cikin rafi ɗaya. Wani takamaiman mai biyan kuɗi zai iya ganin tarihin saƙon su na sirri kawai.

Kuna iya biyan kuɗi zuwa zaren kuma karɓar sabbin saƙonni ta amfani da umarnin KU KARANTA. Yana da ɗan rikitarwa fiye da XRANGE, don haka za mu fara da mafi sauƙi misalai na farko.

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

Misalin da ke sama yana nuna nau'i marar toshewa KU KARANTA. Lura cewa zaɓin COUNT na zaɓi ne. A haƙiƙa, zaɓin umarni kawai da ake buƙata shine zaɓi na STREAMS, wanda ke ƙayyadaddun jerin rafuka tare da mafi girman mai ganowa. Mun rubuta "STREAMS mystream 0" - muna son karɓar duk bayanan rafi tare da mai ganowa sama da "0-0". Kamar yadda kuke gani daga misalin, umarnin yana mayar da sunan zaren saboda muna iya biyan kuɗi zuwa zaren da yawa a lokaci guda. Za mu iya rubuta, misali, "STREAMS mystream otherstream 0 0". Lura cewa bayan zaɓin STREAMS muna buƙatar fara samar da sunayen duk rafukan da ake buƙata sannan sai jerin masu ganowa.

A cikin wannan tsari mai sauƙi umarnin ba ya yin wani abu na musamman idan aka kwatanta da shi XRANGE. Koyaya, abu mai ban sha'awa shine cewa zamu iya juyawa cikin sauƙi KU KARANTA zuwa umarnin toshewa, yana ƙayyadadden hujjar BLOCK:

> XREAD BLOCK 0 STREAMS mystream $

A cikin misalin da ke sama, an ƙayyade sabon zaɓin BLOCK tare da ƙarewar lokaci na 0 millise seconds (wannan yana nufin jira har abada). Bugu da ƙari, maimakon wucewa mai ganowa na yau da kullun don rafi na rafi, an ƙaddamar da mai gano $ na musamman. Wannan mai ganowa na musamman yana nufin haka KU KARANTA dole ne a yi amfani da matsakaicin mai ganowa a cikin rafi a matsayin mai ganowa. Don haka za mu sami sabbin saƙonni ne kawai daga lokacin da muka fara saurare. A wasu hanyoyi wannan yayi kama da umarnin Unix "tail -f".

Lura cewa lokacin amfani da zaɓin BLOCK ba lallai bane muna buƙatar amfani da mai gano $. Za mu iya amfani da kowane mai ganowa da ke cikin rafi. Idan ƙungiyar za ta iya biyan bukatar mu nan da nan ba tare da toshewa ba, za ta yi hakan, in ba haka ba za ta toshe.

Toshewa KU KARANTA Hakanan zaka iya sauraron zaren da yawa lokaci guda, kawai kuna buƙatar tantance sunayensu. A wannan yanayin, umarnin zai dawo da rikodin rafi na farko wanda ya karɓi bayanai. Mai biyan kuɗi na farko da aka toshe don zaren da aka bayar zai karɓi bayanai da farko.

Ƙungiyoyin Mabukaci

A wasu ayyuka, muna so mu iyakance damar masu biyan kuɗi zuwa saƙonni a cikin layi ɗaya. Misali inda wannan zai iya zama da amfani shine layin saƙo tare da ma'aikata waɗanda za su karɓi saƙonni daban-daban daga zaren, ba da damar sarrafa saƙon su daidaita.

Idan muka yi tunanin cewa muna da masu biyan kuɗi guda uku C1, C2, C3 da zaren da ke ɗauke da saƙon 1, 2, 3, 4, 5, 6, 7, sa'an nan za a ba da saƙon kamar yadda a cikin zanen da ke ƙasa:

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

Don cimma wannan tasirin, Redis Stream yana amfani da ra'ayi mai suna Rukunin Masu amfani. Wannan ra'ayi yayi kama da mai biyan kuɗi na bogi, wanda ke karɓar bayanai daga rafi, amma a zahiri masu biyan kuɗi da yawa a cikin rukuni suna aiki, suna ba da wasu garanti:

  1. Ana isar da kowane saƙo zuwa ga mai biyan kuɗi daban-daban a cikin ƙungiyar.
  2. A cikin rukuni, ana gano masu biyan kuɗi da sunansu, wanda shine kirtani mai hankali. Idan mai biyan kuɗi ya fita daga ƙungiyar na ɗan lokaci, za a iya mayar da shi cikin ƙungiyar ta amfani da sunansa na musamman.
  3. Kowane Ƙungiya na Abokin Ciniki yana bin manufar "saƙon da ba a karanta na farko" ba. Lokacin da mai biyan kuɗi ya buƙaci sababbin saƙonni, zai iya karɓar saƙonnin da ba a taɓa isar da su a baya ga kowane mai biyan kuɗi a cikin ƙungiyar ba.
  4. Akwai umarni don tabbatar da cewa mai biyan kuɗi ya sarrafa saƙon cikin nasara. Har sai an kira wannan umarni, saƙon da aka nema zai ci gaba da kasancewa a matsayin "jiran".
  5. A cikin Rukunin Mabukaci, kowane mai biyan kuɗi na iya buƙatar tarihin saƙon da aka isar masa, amma ba a sarrafa shi ba tukuna (a cikin halin “jiran jiran”)

Ta wata ma’ana, ana iya bayyana yanayin kungiyar kamar haka:

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

Yanzu lokaci ya yi da za a san manyan umarni na Ƙungiyoyin Masu amfani, wato:

  • XGROUP ana amfani da su don ƙirƙira, lalata da sarrafa ƙungiyoyi
  • GROUP GROUP amfani da karanta rafi ta hanyar group
  • XACK - wannan umarni yana bawa mai biyan kuɗi damar yiwa saƙon alama kamar yadda aka yi nasarar sarrafa saƙon

Ƙirƙirar Ƙungiya ta Masu amfani

Bari mu ɗauka cewa mystream ya riga ya wanzu. Sannan umarnin ƙirƙirar rukuni zai yi kama da:

> XGROUP CREATE mystream mygroup $
OK

Lokacin ƙirƙirar ƙungiya, dole ne mu wuce mai ganowa, wanda daga abin da ƙungiyar za ta karɓi saƙonni. Idan kawai muna son karɓar duk sabbin saƙonni, to zamu iya amfani da mai ganowa $ (kamar yadda yake cikin misalinmu na sama). Idan ka saka 0 maimakon mai ganowa na musamman, to duk saƙonnin da ke cikin zaren za su kasance ga ƙungiyar.

Yanzu da aka ƙirƙiri ƙungiyar, nan da nan za mu iya fara karanta saƙonni ta amfani da umarnin GROUP GROUP. Wannan umarnin yayi kama da KU KARANTA kuma yana goyan bayan zaɓi na BLOCK na zaɓi. Koyaya, akwai zaɓin GROUP da ake buƙata wanda dole ne koyaushe a ƙayyade tare da mahawara guda biyu: sunan ƙungiyar da sunan mai biyan kuɗi. Hakanan ana tallafawa zaɓin COUNT.

Kafin karanta zaren, bari mu sanya wasu saƙonni a can:

> 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

Yanzu bari muyi kokarin karanta wannan rafi ta cikin rukuni:

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

Umurnin da ke sama yana karanta a zahiri kamar haka:

"Ni, mai biyan kuɗi Alice, memba na rukuni na, ina so in karanta saƙo guda ɗaya daga rafi wanda ba a taɓa isar wa kowa ba a baya."

A duk lokacin da mai biyan kuɗi ya yi aiki a ƙungiyar, dole ne ya samar da sunanta, wanda ke bayyana kansa musamman a cikin ƙungiyar. Akwai ƙarin daki-daki mafi mahimmanci a cikin umarnin da ke sama - mai ganowa na musamman ">". Wannan mai ganowa na musamman yana tace saƙonni, yana barin waɗanda ba a taɓa isar da su ba.

Hakanan, a cikin lokuta na musamman, zaku iya ƙididdige ainihin mai ganowa kamar 0 ko kowane mai ganowa mai inganci. A wannan yanayin umarnin GROUP GROUP zai dawo muku da tarihin saƙonni tare da matsayi na "jiran" waɗanda aka isar wa takamaiman mai biyan kuɗi (Alice) amma har yanzu ba a yarda da su ta amfani da umarnin ba. XACK.

Za mu iya gwada wannan hali ta wurin tantance ID 0 nan da nan, ba tare da zaɓi ba COUNT. Za mu ga saƙo guda ɗaya da yake jira, wato saƙon apple:

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

Koyaya, idan muka tabbatar da saƙon kamar yadda aka yi nasarar sarrafa saƙon, to ba za a ƙara nuna shi ba:

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

Yanzu shine lokacin Bob don karanta wani abu:

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

Bob, memba na mygroup, ya nemi ba fiye da saƙonni biyu ba. Umurnin yana ba da rahoton saƙonnin da ba a isar da su ba saboda mai ganowa na musamman ">". Kamar yadda kake gani, ba za a nuna saƙon "apple" ba tunda an riga an isar da shi ga Alice, don haka Bob yana karɓar "orange" da "strawberry".

Ta wannan hanyar, Alice, Bob, da duk wani mai biyan kuɗi na ƙungiyar zai iya karanta saƙonni daban-daban daga rafi ɗaya. Hakanan za su iya karanta tarihin saƙonnin da ba a sarrafa su ba ko sanya saƙon kamar yadda aka sarrafa su.

Akwai ƴan abubuwan da ya kamata ku kiyaye:

  • Da zarar mai biyan kuɗi ya ɗauki saƙon a matsayin umarni GROUP GROUP, wannan saƙon yana shiga cikin "jihar mai jiran gado" kuma an sanya shi ga takamaiman mai biyan kuɗi. Sauran masu biyan kuɗi na rukuni ba za su iya karanta wannan sakon ba.
  • Ana ƙirƙira masu biyan kuɗi ta atomatik bayan ambaton farko, babu buƙatar ƙirƙirar su a sarari.
  • Tare da taimakon GROUP GROUP Kuna iya karanta saƙonni daga zaren daban-daban a lokaci guda, duk da haka don yin aiki kuna buƙatar fara ƙirƙirar ƙungiyoyi masu suna iri ɗaya don kowane zaren ta amfani da XGROUP

Farfadowa bayan gazawar

Mai biyan kuɗi zai iya murmurewa daga gazawar kuma ya sake karanta jerin saƙon sa tare da matsayin "jiran". Koyaya, a cikin duniyar gaske, masu biyan kuɗi na iya yin kasala a ƙarshe. Me zai faru da makalewar saƙon mai biyan kuɗi idan mai biyan kuɗi ya kasa murmurewa daga gazawar?
Ƙungiya mai amfani tana ba da fasalin da ake amfani da shi don irin waɗannan lokuta kawai - lokacin da kuke buƙatar canza mai saƙon.

Abu na farko da kake buƙatar yi shine kiran umarnin KYAUTA, wanda ke nuna duk saƙonnin da ke cikin ƙungiyar tare da matsayi "a jiran". A cikin mafi sauƙin tsari, ana kiran umarnin tare da gardama guda biyu kawai: sunan zaren da sunan rukuni:

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

Tawagar ta nuna adadin saƙonnin da ba a sarrafa su ga duka ƙungiyar da kowane mai biyan kuɗi. Muna da Bob kawai tare da fitattun saƙonni biyu saboda kawai sakon da Alice ta nema aka tabbatar da shi XACK.

Za mu iya neman ƙarin bayani ta amfani da ƙarin muhawara:

XPENDING {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]
{start-id} {end-id} - kewayon masu ganowa (zaka iya amfani da "-" da "+")
{count} - adadin ƙoƙarin isarwa
{suna-mai amfani} - sunan rukuni

> 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

Yanzu muna da cikakkun bayanai don kowane saƙo: ID, sunan mai biyan kuɗi, lokacin aiki a cikin millise seconds kuma a ƙarshe adadin ƙoƙarin isarwa. Muna da saƙonni guda biyu daga Bob kuma sun yi aiki tsawon 74170458 millise seconds, kimanin awanni 20.

Lura cewa babu wanda zai hana mu bincika abin da ke cikin saƙon ta hanyar amfani kawai XRANGE.

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

Dole ne mu sake maimaita mai gano guda sau biyu a cikin muhawarar. Yanzu da muke da wasu ra'ayi, Alice na iya yanke shawarar cewa bayan awanni 20 na raguwa, tabbas Bob ba zai murmure ba, kuma lokaci yayi da za a bincika waɗannan saƙonnin kuma a ci gaba da sarrafa su ga Bob. Don wannan muna amfani da umarnin XCLAIM:

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

Ta amfani da wannan umarni, za mu iya karɓar saƙon "baƙin waje" wanda har yanzu ba a sarrafa shi ta hanyar canza mai shi zuwa {mabukaci}. Duk da haka, za mu iya kuma samar da mafi ƙarancin lokacin aiki {min-raco-time}. Wannan yana taimakawa wajen gujewa halin da ake ciki inda abokan ciniki biyu ke ƙoƙarin canza mai saƙo ɗaya lokaci guda:

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

Abokin ciniki na farko zai sake saita lokacin ragewa kuma ya ƙara adadin isarwa. Don haka abokin ciniki na biyu ba zai iya nema ba.

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

Alice ta yi nasarar yin iƙirarin saƙon, wanda yanzu za ta iya sarrafa saƙon kuma ta amince da shi.

Daga misalin da ke sama, zaku iya ganin cewa buƙatu mai nasara tana mayar da abubuwan da ke cikin saƙon kanta. Duk da haka, wannan ba lallai ba ne. Za a iya amfani da zaɓin JUSTID don mayar da ID ɗin saƙo kawai. Wannan yana da amfani idan ba ku da sha'awar cikakkun bayanai na saƙon kuma kuna son ƙara yawan aikin tsarin.

counter na bayarwa

The counter da kuke gani a cikin fitarwa KYAUTA shine adadin isar da sako na kowane sako. Ana ƙara irin wannan na'urar ta hanyoyi biyu: lokacin da aka sami nasarar neman saƙo ta hanyar XCLAIM ko lokacin da ake amfani da kira GROUP GROUP.

Yana da al'ada don isar da wasu saƙonni sau da yawa. Babban abu shi ne cewa duk saƙonni ana sarrafa su a ƙarshe. Wani lokaci matsaloli suna faruwa lokacin sarrafa saƙo saboda saƙon da kansa ya lalace, ko sarrafa saƙo yana haifar da kuskure a lambar mai sarrafa. A wannan yanayin, yana iya zama cewa babu wanda zai iya sarrafa wannan sakon. Tun da muna da ma'aunin ƙoƙon isarwa, za mu iya amfani da wannan ma'aunin don gano irin waɗannan yanayi. Don haka, da zarar adadin isarwa ya kai babban lambar da kuka ƙayyade, zai fi kyau a saka irin wannan saƙon akan wani zaren kuma aika sanarwa zuwa ga mai sarrafa tsarin.

Jihar Zare

tawagar XINFO ana amfani da su don neman bayanai daban-daban game da zaren da ƙungiyoyin sa. Misali, umarni na asali yayi kama da haka:

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

Umurnin da ke sama yana nuna cikakken bayani game da ƙayyadadden rafi. Yanzu wani ɗan misali mai rikitarwa:

> 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

Umurnin da ke sama yana nuna cikakken bayani ga duk ƙungiyoyin da aka ƙayyade

> 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

Umurnin da ke sama yana nuna bayanai ga duk masu biyan kuɗi na ƙayyadadden rafi da rukuni.
Idan kun manta tsarin tsarin umarni, kawai nemi umarnin kanta don taimako:

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

Iyakar Girman Rafi

Yawancin aikace-aikace ba sa son tattara bayanai cikin rafi har abada. Yawancin lokaci yana da amfani don samun matsakaicin adadin saƙonnin da aka yarda da zaren. A wasu lokuta, yana da amfani don matsar da duk saƙonni daga zaren zuwa wani kantin sayar da dagewa lokacin da ƙayyadadden girman zaren ya kai. Kuna iya iyakance girman rafi ta amfani da sigar MAXLEN a cikin umarnin XAD:

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

Lokacin amfani da MAXLEN, ana share tsoffin bayanan ta atomatik lokacin da suka kai tsayin daka, don haka rafi yana da tsayin daka. Duk da haka, pruning a cikin wannan yanayin ba ya faruwa a hanya mafi inganci a cikin ƙwaƙwalwar Redis. Kuna iya inganta yanayin kamar haka:

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

Dalilin ~ a cikin misalin da ke sama yana nufin cewa ba lallai ba ne mu buƙaci iyakance tsawon rafi zuwa takamaiman ƙima. A cikin misalinmu, wannan na iya zama kowace lamba mafi girma ko daidai da 1000 (misali, 1000, 1010, ko 1030). Mun bayyana a sarari cewa muna son rafinmu ya adana aƙalla bayanai 1000. Wannan yana sa sarrafa ƙwaƙwalwar ajiya ya fi inganci a cikin Redis.

Akwai kuma wata ƙungiya daban XTRIM, wanda ke yin abu ɗaya:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

Ajiye na dindindin da kwafi

Redis Stream an kwafi shi a daidaita shi zuwa nodes ɗin bayi kuma an adana shi zuwa fayiloli kamar AOF (hoton duk bayanan) da RDB (login duk ayyukan rubutu). Hakanan ana goyan bayan sake fasalin Ƙungiyoyin Mabukaci. Sabili da haka, idan saƙo yana cikin matsayi na "jiran" akan kullin maigidan, to a kan nodes ɗin bawa wannan saƙon zai sami matsayi iri ɗaya.

Cire abubuwa guda ɗaya daga rafi

Akwai umarni na musamman don share saƙonni XDEL. Umurnin yana samun sunan zaren da ID ɗin saƙon zai biyo baya:

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

Lokacin amfani da wannan umarni, kuna buƙatar la'akari da cewa ainihin ƙwaƙwalwar ajiyar ba za ta fito nan da nan ba.

Tsawon magudanan ruwa

Bambanci tsakanin rafuka da sauran tsarin bayanan Redis shine lokacin da sauran tsarin bayanan ba su da abubuwa a cikin su, a matsayin sakamako na gefe, tsarin bayanan da kansa zai cire daga ƙwaƙwalwar ajiya. Don haka, alal misali, saitin da aka jera za a cire gaba ɗaya lokacin da kiran ZREM ya cire kashi na ƙarshe. Madadin haka, ana barin zaren su kasance cikin ƙwaƙwalwar ajiya ko da ba tare da wani abu a ciki ba.

ƙarshe

Redis Stream yana da kyau don ƙirƙirar dillalan saƙo, layin saƙo, haɗaɗɗen shiga, da tsarin taɗi na tarihi.

Kamar yadda na fada sau daya Niklaus Wirth ne, shirye-shirye algorithms ne da tsarin bayanai, kuma Redis ya riga ya ba ku duka.

source: www.habr.com

Add a comment