Redis Stream - ka hilinaʻi a me ka scalability o kāu ʻōnaehana memo

Redis Stream - ka hilinaʻi a me ka scalability o kāu ʻōnaehana memo

ʻO Redis Stream kahi ʻano ʻikepili abstract hou i hoʻokomo ʻia ma Redis me ka mana 5.0
ʻO ka manaʻo, ʻo Redis Stream kahi papa inoa e hiki ai iā ʻoe ke hoʻohui i nā mea komo. Loaʻa i kēlā me kēia komo kahi mea hōʻike kūʻokoʻa. ʻO ka mea paʻamau, hana ʻakomi ʻia ka ID a loaʻa i kahi hōʻailona manawa. No laila, hiki iā ʻoe ke nīnau i nā pae o nā moʻolelo i ka manawa, a i ʻole ka loaʻa ʻana o ka ʻikepili hou i kona hiki ʻana mai i ke kahawai, e like me ke kauoha Unix "tail -f" heluhelu i kahi faila log a paʻa i ka wā e kali ana i ka ʻikepili hou. E hoʻomaopopo he hiki i nā mea kūʻai he nui ke hoʻolohe i kahi pae i ka manawa like, e like me ka nui o nā kaʻina "tail -f" hiki ke heluhelu i kahi faila i ka manawa like me ka hakakā ʻole me kekahi.

No ka hoʻomaopopo ʻana i nā pono āpau o ka ʻano ʻikepili hou, e nānā wikiwiki mākou i nā hale Redis lōʻihi e hoʻohālikelike nei i ka hana o Redis Stream.

Hoʻopuka hou i ka PUB/SUB

ʻO Redis Pub/Sub kahi ʻōnaehana memo maʻalahi i kūkulu ʻia i loko o kāu hale kūʻai waiwai kī. Eia naʻe, hiki mai ka maʻalahi ma ke kumukūʻai:

  • Inā hāʻule ka mea hoʻopuka no kekahi kumu, a laila nalowale kāna mau mea kākau inoa
  • Pono ka mea hoʻopuka e ʻike i ka helu kikoʻī o nā mea kākau inoa a pau
  • Hiki i ka mea hoʻopuka ke hoʻonui i kāna mau mea kākau me ka hana inā paʻi ʻia ka ʻikepili ma mua o ka hana ʻana
  • Holoi ʻia ka memo mai ka pale o ka mea hoʻopuka ma hope koke iho o ka paʻi ʻana, me ka nānā ʻole i ka nui o ka poʻe kākau inoa i hāʻawi ʻia a pehea ka wikiwiki i hiki iā lākou ke hoʻoponopono i kēia memo.
  • E loaʻa i ka poʻe kākau inoa ka leka i ka manawa like. Pono nā mea kākau inoa iā lākou iho e ʻae i waena o lākou iho i ke kauoha o ka hoʻoili ʻana i ka leka like.
  • ʻAʻohe mea hana i kūkulu ʻia e hōʻoia i ka hoʻokō pono ʻana o ka mea kākau inoa i kahi leka. Inā loaʻa ka memo i ka mea kākau inoa a hāʻule i ka wā e hana ai, ʻaʻole ʻike ka mea hoʻopuka.

Papa inoa Redis

ʻO ka papa inoa ʻo Redis kahi ʻano ʻikepili e kākoʻo ana i ka pale ʻana i nā kauoha heluhelu. Hiki iā ʻoe ke hoʻohui a heluhelu i nā memo mai ka hoʻomaka a i ʻole ka hopena o ka papa inoa. Ma muli o kēia hoʻolālā, hiki iā ʻoe ke hana i kahi hoʻopaʻa a i ʻole queue maikaʻi no kāu ʻōnaehana puʻupuʻu, a ma ka hapa nui e lawa kēia. ʻO nā ʻokoʻa nui mai Redis Pub/Sub:

  • Hāʻawi ʻia ka leka i hoʻokahi mea kūʻai. E loaʻa mua ka ʻikepili i ka mea kūʻai aku i pāpā ʻia i ka heluhelu mua.
  • Pono ʻo Clint e hoʻomaka i ka hana heluhelu no kēlā me kēia memo iā ia iho. ʻAʻole ʻike ʻo List i nā mea kūʻai aku.
  • Mālama ʻia nā memo a hiki i ka heluhelu ʻana a i ʻole ka holoi ʻana i nā memo. Inā ʻoe e hoʻonohonoho i ka server Redis e hoʻokuʻu i ka ʻikepili i ka disk, a laila piʻi nui ka hilinaʻi o ka ʻōnaehana.

Introduction to Stream

Hoʻohui i kahi komo i kahi kahawai

hui XADD hoʻokomo hou i ke kahawai. ʻAʻole ʻo ka moʻolelo he kaula wale nō, aia i loko o hoʻokahi a ʻoi aʻe paha mau kī-waiwai paʻa. No laila, ua hoʻonohonoho ʻia kēlā me kēia komo a ua like me ke ʻano o kahi faila CSV.

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

I ka laʻana ma luna, hoʻohui mākou i ʻelua mau māla i ke kahawai me ka inoa (key) "mystream": "sensor-id" a me "temperature" me nā waiwai "1234" a me "19.8", kēlā me kēia. E like me ka hoʻopaʻapaʻa ʻelua, lawe ke kauoha i kahi ʻike e hāʻawi ʻia i ke komo - ʻike kūʻokoʻa kēia mea hōʻike i kēlā me kēia komo i ke kahawai. Eia naʻe, i kēia hihia ua hala mākou * no ka mea makemake mākou e hana ʻo Redis i kahi ID hou no mākou. E hoʻonui ʻia kēlā me kēia ID hou. No laila, e loaʻa i kēlā me kēia komo hou kahi mea hōʻike kiʻekiʻe e pili ana i nā mea i komo mua.

Hōʻike hōʻike

Hoʻihoʻi ʻia ka ID komo ma ke kauoha XADD, aia i ʻelua ʻāpana:

{millisecondsTime}-{sequenceNumber}

millisecondsTime - Ka manawa Unix i milliseconds (Redis server manawa). Eia nō naʻe, inā like ka manawa o kēia manawa a i ʻole ka liʻiliʻi ma mua o ka manawa o ka hoʻopaʻa ʻana ma mua, a laila hoʻohana ʻia ka manawa o ka hoʻopaʻa ʻana ma mua. No laila, inā e hoʻi ka manawa kikowaena i ka manawa, e hoʻomau ka mea hōʻike hou i ka waiwai hoʻonui.

SequenceNumber hoʻohana ʻia no nā moʻolelo i hana ʻia ma ka millisecond like. SequenceNumber e hoʻonui ʻia e 1 pili i ke komo mua. No ka mea SequenceNumber he 64 bits ka nui, a laila ma ka hoʻomaʻamaʻa ʻaʻole pono ʻoe e holo i ka palena o ka helu o nā moʻolelo i hiki ke hana ʻia i loko o hoʻokahi millisecond.

He mea ʻē paha ke ʻano o ia mau mea hōʻike i ka nānā mua ʻana. Hiki paha i ka mea heluhelu hilinaʻi ke noʻonoʻo i ke kumu o ka manawa i ʻāpana o ka mea ʻike. ʻO ke kumu ke kākoʻo nei nā kahawai Redis i nā nīnau kikoʻī e ka ID. Ma muli o ka pili ʻana o ka mea ʻike me ka manawa i hana ʻia ai ka moʻolelo, hiki iā ia ke nīnau i nā pae manawa. E nānā mākou i kahi hiʻohiʻona kikoʻī ke nānā mākou i ke kauoha XRANGE.

Inā no kekahi kumu e pono ai ka mea hoʻohana e kuhikuhi i kāna ʻike ponoʻī, kahi, no ka laʻana, pili me kekahi ʻōnaehana waho, a laila hiki iā mākou ke hāʻawi iā ia i ke kauoha. XADD ma kahi o * e like me ka mea i hōʻike ʻia ma lalo nei:

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

E ʻoluʻolu, ma kēia hihia, pono ʻoe e nānā i ka hoʻonui ʻana i ka ID iā ʻoe iho. I kā mākou laʻana, ʻo ka mea hōʻike haʻahaʻa he "0-1", no laila ʻaʻole e ʻae ke kauoha i kahi mea hōʻike ʻē aʻe i like a i ʻole ka liʻiliʻi ma mua o "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

Ka helu o nā moʻolelo i kēlā me kēia kahawai

Hiki ke kiʻi i ka helu o nā moʻolelo i loko o kahi kahawai me ka hoʻohana ʻana i ke kauoha XLEN. No kā mākou laʻana, e hoʻihoʻi kēia kauoha i kēia waiwai:

> XLEN somestream
(integer) 2

Nā nīnau laulā - XRANGE a me XREVRANGE

No ke noi ʻana i ka ʻikepili ma ka laulā, pono mākou e kuhikuhi i ʻelua mau mea hōʻike - ka hoʻomaka a me ka hopena o ka laulā. ʻO ka laula i hoʻihoʻi ʻia e komo i nā mea āpau, me nā palena. Aia pū kekahi ʻelua mea hōʻike kūikawā "-" a me "+", ʻo ia hoʻi ka mea ʻike liʻiliʻi loa (ka moʻolelo mua) a me ka mea nui loa (moʻolelo hope) i ke kahawai. E papa inoa ka laʻana ma lalo nei i nā hoʻokomo kahawai.

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

ʻO kēlā me kēia moʻolelo i hoʻihoʻi ʻia he ʻano o nā mea ʻelua: kahi mea hōʻike a me kahi papa inoa o nā hui waiwai kī. Ua ʻōlelo mua mākou e pili ana nā mea hōʻike moʻolelo i ka manawa. No laila, hiki iā mākou ke noi i kahi ākea o kahi manawa kikoʻī. Eia naʻe, hiki iā mākou ke kuhikuhi i ka noi ʻaʻole i ka mea hōʻike piha, akā ʻo ka manawa Unix wale nō, e haʻalele i ka ʻāpana e pili ana i SequenceNumber. E hoʻonohonoho ʻokoʻa ʻia ka ʻāpana i haʻalele ʻia i ka zero ma ka hoʻomaka ʻana o ka laulā a i ka waiwai nui loa i ka hopena o ka laulā. Aia ma lalo kahi hiʻohiʻona pehea e hiki ai iā ʻoe ke noi i kahi ākea o ʻelua milliseconds.

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

Hoʻokahi wale nō kā mākou komo ʻana i kēia pae, akā i nā pūʻulu ʻikepili maoli hiki ke nui ka hopena i hoʻihoʻi ʻia. No keia kumu XRANGE kākoʻo i ke koho COUNT. Ma ka wehewehe ʻana i ka nui, hiki iā mākou ke loaʻa nā moʻolelo N mua. Inā pono mākou e kiʻi i nā moʻolelo N aʻe (pagination), hiki iā mākou ke hoʻohana i ka ID i loaʻa hope, e hoʻonui SequenceNumber e kekahi a ninau hou aku. E nana kakou i keia ma keia la'ana. Hoʻomaka mākou e hoʻohui i 10 mau mea me XADD (me ka manaʻo ua hoʻopiha ʻia kaʻu kahawai me 10 mau mea). No ka hoʻomaka ʻana i ka loaʻa ʻana o nā mea 2 i kēlā me kēia kauoha, hoʻomaka mākou me ka laulā piha akā me COUNT like me 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"

No ka hoʻomau i ka hoʻomau ʻana me nā mea ʻelua e hiki mai ana, pono mākou e koho i ka ID hope loa i loaʻa, ʻo ia hoʻi 1519073279157-0, a hoʻohui i ka 1 i SequenceNumber.
ʻO ka hopena ID, i kēia hihia 1519073279157-1, hiki ke hoʻohana ʻia ma ke ʻano he hoʻomaka hou o ka hoʻopaʻapaʻa ākea no ke kelepona aʻe. 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"

A laila. No ka paʻakikī XRANGE ʻo O(log(N)) e ʻimi a laila O(M) e hoʻihoʻi i nā mea M, a laila wikiwiki kēlā me kēia ʻanuʻu. No laila, hoʻohana XRANGE Hiki ke hoʻololi maikaʻi ʻia nā kahawai.

hui XREVRANGE ʻo ia ka mea like XRANGE, akā hoʻihoʻi i nā mea i ka hoʻonohonoho hope:

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

E ʻoluʻolu e hoʻomaopopo i ke kauoha XREVRANGE e hoʻomaka a hoʻōki i nā ʻōlelo hoʻopaʻapaʻa ma ka ʻaoʻao hoʻohuli.

Heluhelu i nā mea hou me XREAD

Hoʻomaka pinepine ka hana o ke kau inoa ʻana i kahi kahawai a loaʻa wale nā ​​memo hou. Ua like paha kēia manaʻo me Redis Pub/Sub a i ʻole ke kāohi ʻana i ka Redis List, akā aia nā ʻokoʻa koʻikoʻi i ka hoʻohana ʻana iā Redis Stream:

  1. Hāʻawi ʻia kēlā me kēia memo hou i kēlā me kēia mea kākau inoa. He ʻokoʻa kēia ʻano mai kahi papa inoa Redis, kahi e heluhelu ʻia ai kahi leka hou e ka mea kākau inoa.
  2. ʻOiai ma Redis Pub/Sub poina ʻia nā memo a pau ʻole a hoʻomau ʻia, ma Stream e hoʻopaʻa mau ʻia nā memo a pau (koe ke kumu o ka mea kūʻai aku i ka hoʻopau ʻana).
  3. Hiki iā Redis Stream iā ʻoe ke hoʻokaʻawale i ke komo ʻana i nā memo i loko o hoʻokahi kahawai. Hiki i ka mea kākau inoa ke ʻike wale i kā lākou moʻolelo memo pilikino.

Hiki iā ʻoe ke kau inoa i kahi pae a loaʻa nā memo hou me ke kauoha XREAD. ʻOi aku ka paʻakikī ma mua o XRANGE, no laila e hoʻomaka mākou me nā laʻana maʻalahi ma mua.

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

Hōʻike ka laʻana i luna i kahi ʻano pale ʻole XREAD. E hoʻomaopopo he koho ke koho COUNT. ʻO ka ʻoiaʻiʻo, ʻo ke koho kauoha wale nō ka koho STREAMS, kahi e wehewehe ai i kahi papa inoa o nā kahawai me ka mea hōʻike kiʻekiʻe. Ua kākau mākou iā "STREAMS mystream 0" - makemake mākou e loaʻa nā moʻolelo āpau o ke kahawai mystream me kahi mea hōʻike ʻoi aku ka nui ma mua o "0-0". E like me kāu e ʻike ai mai ka laʻana, e hoʻihoʻi ke kauoha i ka inoa o ke kaula no ka mea hiki iā mākou ke kau inoa i nā kaula he nui i ka manawa like. Hiki iā mākou ke kākau, no ka laʻana, "STREAMS mystream otherstream 0 0". E ʻoluʻolu, ma hope o ke koho STREAMS pono mākou e hāʻawi mua i nā inoa o nā kahawai i makemake ʻia a laila wale nō ka papa inoa o nā mea hōʻike.

Ma kēia ʻano maʻalahi ʻaʻole hana ke kauoha i kekahi mea kūikawā i hoʻohālikelike ʻia XRANGE. Eia naʻe, ʻo ka mea hoihoi, hiki iā mākou ke huli maʻalahi XREAD i kahi kauoha pale, e kuhikuhi ana i ka hoʻopaʻapaʻa BLOCK:

> XREAD BLOCK 0 STREAMS mystream $

Ma ka laʻana ma luna, ua kuhikuhi ʻia kahi koho BLOCK hou me kahi manawa o 0 milliseconds (ʻo ia hoʻi ke kali mau ʻole). Eia kekahi, ma kahi o ka hāʻawi ʻana i ka mea hōʻike maʻamau no ke kahawai mystream, ua hāʻawi ʻia kahi mea hōʻike kūikawā $. ʻO kēia mea hōʻike kūikawā ʻo ia hoʻi XREAD pono e hoʻohana i ka mea hōʻike kiʻekiʻe loa i kaʻu kahawai ma ke ʻano he ʻike. No laila e loaʻa wale iā mākou nā memo hou mai ka manawa a mākou i hoʻomaka ai e hoʻolohe. Ma kekahi mau ʻano, ua like kēia me ke kauoha Unix "tail -f".

E hoʻomaopopo i ka hoʻohana ʻana i ka koho BLOCK ʻaʻole pono mākou e hoʻohana i ka mea hōʻike kūikawā $. Hiki iā mākou ke hoʻohana i nā mea hōʻike i loaʻa i ke kahawai. Inā hiki i ka hui ke lawelawe koke i kā mākou noi me ka pale ʻole, e hana ia pēlā, inā ʻaʻole ia e poloka.

Kāohi ʻana XREAD Hiki iā ʻoe ke hoʻolohe i nā loina he nui i ka manawa hoʻokahi, pono ʻoe e kuhikuhi i ko lākou mau inoa. I kēia hihia, e hoʻihoʻi ke kauoha i kahi moʻolelo o ke kahawai mua i loaʻa ka ʻikepili. ʻO ka mea kākau mua i pāpā ʻia no kahi kahawai i hāʻawi ʻia e loaʻa mua ka ʻikepili.

Nā Pūʻulu Kūʻai

Ma kekahi mau hana, makemake mākou e kaupalena i ke komo ʻana o ka mea kākau inoa i nā memo i loko o hoʻokahi pae. ʻO kahi laʻana kahi e hiki ai ke hoʻohana ʻia he laina leka me nā limahana e loaʻa nā memo like ʻole mai kahi kaula, e ʻae ana i ka hoʻoili ʻana i nā memo.

Inā manaʻo mākou he ʻekolu kā mākou mea kākau inoa C1, C2, C3 a me kahi pae i loaʻa nā memo 1, 2, 3, 4, 5, 6, 7, a laila e lawelawe ʻia nā memo e like me ke kiʻi ma lalo nei:

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

No ka hoʻokō ʻana i kēia hopena, hoʻohana ʻo Redis Stream i kahi manaʻo i kapa ʻia ʻo Consumer Group. Ua like kēia manaʻo me ka pseudo-subscriber, e loaʻa ana i ka ʻikepili mai kahi kahawai, akā lawelawe maoli ʻia e nā mea kākau inoa he nui i loko o kahi hui, e hāʻawi ana i kekahi mau hōʻoia:

  1. Hāʻawi ʻia kēlā me kēia memo i kahi mea kākau inoa ʻē aʻe i loko o ka hui.
  2. I loko o kahi pūʻulu, ʻike ʻia ka poʻe kākau inoa ma ko lākou inoa, ʻo ia ka string case-sensitive. Inā haʻalele ka mea kākau inoa mai ka hui, hiki ke hoʻihoʻi ʻia i ka hui me ka hoʻohana ʻana i kona inoa ponoʻī.
  3. Ke hahai nei kēlā me kēia Pūʻulu Consumer i ka manaʻo "memo mua i heluhelu ʻole ʻia". Ke noi ka mea kākau inoa i nā memo hou, hiki iā ia ke loaʻa nā memo i hāʻawi mua ʻole ʻia i kekahi mea kākau inoa i loko o ka hui.
  4. Aia kekahi kauoha e hōʻoia i ka hoʻokō pono ʻana o ka memo e ka mea kākau inoa. A hiki i ke kāhea ʻia ʻana o kēia kauoha, e noho ka memo i noi ʻia ma ke kūlana "pending".
  5. I loko o ka Consumer Group, hiki i kēlā me kēia mea kākau ke noi i kahi moʻolelo o nā leka i hāʻawi ʻia iā ia, akā ʻaʻole i hoʻokō ʻia (ma ke kūlana "pending")

Ma kahi ʻano, hiki ke hōʻike ʻia ke kūlana o ka hui penei:

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

ʻO ka manawa kēia e kamaʻāina ai i nā kauoha nui no ka Consumer Group, ʻo ia hoʻi:

  • XGROUP hoʻohana ʻia e hana, luku a mālama i nā hui
  • XREADGROUP hoʻohana ʻia e heluhelu i ke kahawai ma o ka hui
  • XACK - ʻae kēia kauoha i ka mea kākau inoa e hōʻailona i ka memo i hoʻokō pono ʻia

Ka Hoʻokumu ʻana i ka Pūʻulu Kūʻai

E noʻonoʻo kākou ua loaʻa mua ka mystream. A laila e like ke kauoha hana pūʻulu:

> XGROUP CREATE mystream mygroup $
OK

I ka hana ʻana i kahi hui, pono mākou e hāʻawi i kahi mea ʻike, e hoʻomaka ana e loaʻa i ka hui nā memo. Inā makemake mākou e loaʻa nā memo hou a pau, a laila hiki iā mākou ke hoʻohana i ka mea hōʻike kūikawā $ (e like me kā mākou hiʻohiʻona ma luna). Inā ʻoe e kuhikuhi i ka 0 ma kahi o kahi mea hōʻike kūikawā, a laila e loaʻa nā memo a pau i ka pae i ka hui.

I kēia manawa ua hana ʻia ka hui, hiki iā mākou ke hoʻomaka koke i ka heluhelu ʻana i nā leka me ka hoʻohana ʻana i ke kauoha XREADGROUP. Ua like loa keia kauoha me XREAD a kākoʻo i ke koho BLOCK koho. Eia nō naʻe, aia kahi koho GROUP pono e kuhikuhi mau ʻia me nā manaʻo ʻelua: ka inoa hui a me ka inoa mea kākau. Kākoʻo ʻia ke koho COUNT.

Ma mua o ka heluhelu ʻana i ka pae, e kau i kekahi mau memo ma laila:

> 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

I kēia manawa e hoʻāʻo mākou e heluhelu i kēia kahawai ma o ka hui:

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

Heluhelu ʻia ka ʻōlelo ma luna nei i ka verbatim penei:

"Makemake wau, ka mea kākau inoa ʻo Alice, he lālā o kaʻu hui, e heluhelu i hoʻokahi leka mai koʻu kahawai ʻaʻole i hāʻawi ʻia i kekahi ma mua."

I kēlā me kēia manawa e hana ka mea kākau inoa i kahi hana ma kahi hui, pono ia e hāʻawi i kona inoa, e ʻike kūʻokoʻa iā ia iho i loko o ka hui. Aia kekahi kikoʻī koʻikoʻi ʻē aʻe ma ke kauoha i luna - ka mea hōʻike kūikawā ">". Hoʻopili kēia mea hōʻike kūikawā i nā memo, waiho wale i nā memo i hoʻouna ʻole ʻia ma mua.

Eia kekahi, i nā hihia kūikawā, hiki iā ʻoe ke kuhikuhi i kahi mea hōʻike maoli e like me 0 a i ʻole kekahi mea hōʻike kūpono. Ma keia hihia ke kauoha XREADGROUP e hoʻihoʻi iā ʻoe i kahi moʻolelo o nā memo me ke kūlana "pending" i hāʻawi ʻia i ka mea kākau inoa (Alice) akā ʻaʻole i ʻae ʻia me ka hoʻohana ʻana i ke kauoha. XACK.

Hiki iā mākou ke hoʻāʻo i kēia ʻano ma ke kuhikuhi koke ʻana i ka ID 0, me ka ʻole o ke koho KANAWAI. E ʻike wale mākou i hoʻokahi memo e kali nei, ʻo ia hoʻi, ka leka apple:

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

Eia naʻe, inā mākou e hōʻoia i ka memo i hoʻokō pono ʻia, a laila ʻaʻole ia e hōʻike hou ʻia:

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

ʻO kēia ka manawa o Bob e heluhelu i kekahi mea:

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

Ua noi ʻo Bob, he lālā o kaʻu hui, ʻaʻole i ʻoi aku ma mua o ʻelua mau leka. Hōʻike wale ke kauoha i nā memo i hoʻouna ʻole ʻia ma muli o ka mea hōʻike kūikawā ">". E like me kāu e ʻike ai, ʻaʻole e hōʻike ʻia ka memo "apple" no ka mea ua hāʻawi ʻia iā Alice, no laila ua loaʻa iā Bob ka "ʻalani" a me ka "strawberry".

Ma kēia ala, hiki iā Alice, Bob, a me nā mea kākau inoa ʻē aʻe o ka hui ke heluhelu i nā memo like ʻole mai ke kahawai hoʻokahi. Hiki iā lākou ke heluhelu i kā lākou mōʻaukala o nā memo i hana ʻole ʻia a i ʻole e kaha i nā memo e like me ka hana ʻana.

Aia kekahi mau mea e hoʻomanaʻo ai:

  • I ka manawa e noʻonoʻo ai ka mea kākau inoa he kauoha XREADGROUP, hele kēia memo i ka moku'āina "pending" a hāʻawi ʻia i kēlā mea kākau inoa kikoʻī. ʻAʻole hiki i nā mea kākau inoa ʻē aʻe ke heluhelu i kēia memo.
  • Hoʻokumu ʻia nā mea kākau inoa ma ka haʻi mua ʻana, ʻaʻohe pono e hana pono iā lākou.
  • Me ke kōkuaʻana o XREADGROUP Hiki iā ʻoe ke heluhelu i nā memo mai nā pae like ʻole i ka manawa like, akā naʻe no kēia hana pono ʻoe e hana mua i nā hui me ka inoa like no kēlā me kēia pae me ka hoʻohana ʻana. XGROUP

Hoʻihoʻi ma hope o ka hāʻule

Hiki i ka mea kākau ke ho'ōla mai ka hemahema a heluhelu hou i kāna papa inoa o nā leka me ke kūlana "pending". Eia naʻe, ma ka honua maoli, hiki i ka poʻe kākau inoa ke hāʻule hope. He aha ka hopena i nā memo paʻa o ka mea kākau inoa inā ʻaʻole hiki i ka mea kākau inoa ke hoʻōla mai kahi hemahema?
Hāʻawi ʻo Consumer Group i kahi hiʻohiʻona i hoʻohana ʻia no nā hihia like - inā pono ʻoe e hoʻololi i ka mea nona nā memo.

ʻO ka mea mua āu e hana ai, ʻo ia ke kāhea i ke kauoha HOOLAHA, e hōʻike ana i nā memo a pau i loko o ka hui me ke kūlana "pending". Ma kona ʻano maʻalahi, ua kapa ʻia ke kauoha me ʻelua mau manaʻo: ka inoa thread a me ka inoa hui:

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

Ua hōʻike ka hui i ka helu o nā memo i hana ʻole ʻia no ka hui holoʻokoʻa a no kēlā me kēia mea kākau inoa. Loaʻa iā mākou ʻo Bob wale nō me ʻelua mau leka koʻikoʻi no ka mea ʻo ka leka wale nō i noi ʻia e Alice ua hōʻoia ʻia me XACK.

Hiki iā mākou ke noi i ka ʻike hou aʻe me ka hoʻohana ʻana i nā manaʻo hou aʻe:

XPENDING {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]
{start-id} {end-id} - ka laulā o nā mea hōʻike (hiki iā ʻoe ke hoʻohana i ka "-" a me "+")
{helu} — helu o nā hoʻāʻo hoʻouna
{inoa-mea kūʻai aku} - inoa hui

> 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

I kēia manawa, loaʻa iā mākou nā kikoʻī no kēlā me kēia memo: ID, inoa mea kākau, manawa hana ʻole i milliseconds a hope ka helu o nā hoʻāʻo lawe. Loaʻa iā mākou ʻelua mau memo mai Bob a ua hana ʻole lākou no 74170458 milliseconds, ma kahi o 20 mau hola.

E ʻoluʻolu, ʻaʻohe mea e kāohi iā mākou mai ka nānā ʻana i ke ʻano o ka memo ma ka hoʻohana wale ʻana XRANGE.

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

Pono mākou e hana hou i ka ʻike like ʻelua i nā hoʻopaʻapaʻa. I kēia manawa ua loaʻa iā mākou kekahi manaʻo, hiki iā Alice ke hoʻoholo ma hope o 20 mau hola hoʻomaha, ʻaʻole paha e ola ʻo Bob, a ʻo ka manawa kēia e nīnau ai i kēlā mau memo a hoʻomaka hou i ka hana ʻana iā lākou no Bob. No kēia, hoʻohana mākou i ke kauoha XCLAIM:

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

Ke hoʻohana nei i kēia kauoha, hiki iā mākou ke loaʻa i kahi memo "haole" ʻaʻole i hana ʻia ma ka hoʻololi ʻana i ka mea nona ka {consumer}. Eia nō naʻe, hiki iā mākou ke hāʻawi i kahi manawa hana ʻole {min-idle-time}. Kōkua kēia i ka pale ʻana i kahi kūlana kahi e hoʻāʻo ai nā mea kūʻai ʻelua e hoʻololi i ka mea nona nā memo like:

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

Na ka mea kūʻai mua e hoʻonohonoho i ka downtime a hoʻonui i ka helu hoʻouna. No laila ʻaʻole hiki i ka mea kūʻai ʻelua ke noi.

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

Ua hoʻopiʻi maikaʻi ʻia ka leka e Alice, hiki iā ia ke hoʻoponopono i ka leka a hoʻomaopopo iā ia.

Mai ka laʻana i luna, hiki iā ʻoe ke ʻike i kahi noi kūleʻa e hoʻihoʻi i nā ʻike o ka memo ponoʻī. Eia naʻe, ʻaʻole pono kēia. Hiki ke hoʻohana ʻia ke koho JUSTID e hoʻihoʻi i nā memo ID wale nō. Pono kēia inā ʻaʻole ʻoe makemake i nā kikoʻī o ka memo a makemake e hoʻonui i ka hana ʻōnaehana.

Helu hoʻouna

ʻO ka counter āu e ʻike ai ma ka puka HOOLAHA ʻo ia ka helu o ka lawe ʻana i kēlā me kēia memo. Hoʻonui ʻia kēlā counter ma nā ʻano ʻelua: ke noi maikaʻi ʻia kahi leka ma o XCLAIM a i ʻole ke hoʻohana ʻia kahi kelepona XREADGROUP.

He mea maʻamau ka hoʻouna ʻana i kekahi mau memo i nā manawa he nui. ʻO ka mea nui, ʻo ka hoʻokō ʻia ʻana o nā memo a pau. I kekahi manawa, hiki mai nā pilikia i ka wā e hoʻoponopono ai i kahi memo no ka mea ua ʻino ka memo ponoʻī, a i ʻole ka hoʻoili ʻana i ka memo ke kumu o ka hewa i ka code handler. I kēia hihia, ʻike ʻia ʻaʻole hiki i kekahi ke hana i kēia memo. No ka mea, loaʻa iā mākou kahi helu hoʻāʻo hoʻouna, hiki iā mākou ke hoʻohana i kēia counter e ʻike i nā kūlana like. No laila, i ka manawa e hiki ai ka helu hoʻouna i ka helu kiʻekiʻe āu i kuhikuhi ai, ʻoi aku ka naʻauao e kau i kēlā memo ma kahi pae ʻē aʻe a hoʻouna i kahi leka i ka luna hoʻonohonoho.

Mokuʻāina Thread

hui XINFO hoʻohana ʻia e noi i nā ʻike like ʻole e pili ana i kahi thread a me nā hui. No ka laʻana, ua like ke ʻano o kahi kauoha kumu:

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

Hōʻike ke kauoha ma luna i ka ʻike maʻamau e pili ana i ke kahawai i kuhikuhi ʻia. I kēia manawa he laʻana paʻakikī iki:

> 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

Hōʻike ke kauoha ma luna i ka ʻike maʻamau no nā hui āpau o ka pae i kuhikuhi ʻia

> 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

Hōʻike ke kauoha ma luna i ka ʻike no nā mea kākau inoa a pau o ke kahawai a me ka hui i ʻōlelo ʻia.
Inā poina iā ʻoe ke kauoha syntax, e noi wale i ke kauoha ponoʻī no ke kōkua:

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

Ka palena nui o ke kahawai

ʻAʻole makemake nā noi he nui e hōʻiliʻili i ka ʻikepili i loko o kahi kahawai mau loa. He mea maʻamau ka loaʻa ʻana o ka helu kiʻekiʻe o nā memo i ʻae ʻia i kēlā me kēia pae. Ma nā hihia ʻē aʻe, pono e hoʻoneʻe i nā memo a pau mai kahi thread i kahi hale kūʻai hoʻomau ʻē aʻe ke hiki i ka nui o ka pae i ʻōlelo ʻia. Hiki iā ʻoe ke kaupalena i ka nui o kahi kahawai me ka hoʻohana ʻana i ka parameter MAXLEN ma ke kauoha 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"

I ka hoʻohana ʻana iā MAXLEN, holoi ʻia nā moʻolelo kahiko i ka wā e hiki ai lākou i kahi lōʻihi i ʻōlelo ʻia, no laila he mau ka nui o ke kahawai. Eia naʻe, ʻaʻole hiki ke ʻoki ʻia i kēia hihia ma ke ala maikaʻi loa i ka hoʻomanaʻo ʻana o Redis. Hiki iā ʻoe ke hoʻomaikaʻi i ke kūlana penei:

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

ʻO ka ~ hoʻopaʻapaʻa ma ka laʻana ma luna nei, ʻaʻole pono mākou e kaupalena i ka lōʻihi o ke kahawai i kahi waiwai kikoʻī. Ma kā mākou laʻana, hiki i kēia ke helu ʻoi aku ma mua o a i ʻole like me 1000 (no ka laʻana, 1000, 1010, a i ʻole 1030). Ua hōʻike pololei mākou makemake mākou i kā mākou kahawai e mālama ma kahi o 1000 mau moʻolelo. ʻOi aku ka maikaʻi o ka hoʻokele hoʻomanaʻo ʻana i loko o Redis.

Aia kekahi hui kaʻawale XTRIM, e hana ana i ka mea like:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

Ka mālama mau ʻana a me ka hana hou ʻana

Hoʻopili like ʻia ʻo Redis Stream i nā nodes kauā a mālama ʻia i nā faila e like me AOF (paʻi kiʻi o nā ʻikepili āpau) a me RDB (log o nā hana kākau āpau). Kākoʻo ʻia ka hana hou ʻana o ka mokuʻāina Consumer Groups. No laila, inā he memo i loko o ke kūlana "pending" ma ka node haku, a laila ma nā nodes kauā e loaʻa ke kūlana like.

Ke wehe ʻana i kēlā me kēia mea mai kahi kahawai

Aia kekahi kauoha kūikawā e holoi i nā memo XDEL. Loaʻa ke kauoha i ka inoa o ke kaula i ukali ʻia e nā memo ID e holoi ʻia:

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

Ke hoʻohana nei i kēia kauoha, pono ʻoe e noʻonoʻo ʻaʻole e hoʻokuʻu koke ʻia ka hoʻomanaʻo maoli.

Kolo ka lōʻihi kahawai

ʻO ka ʻokoʻa ma waena o nā kahawai a me nā ʻōnaehana data Redis ʻē aʻe ke loaʻa ʻole nā ​​​​mea ʻē aʻe o nā ʻikepili ʻē aʻe i loko o lākou, ma ke ʻano he hopena ʻaoʻao, e hoʻoneʻe ʻia ke ʻano ʻikepili mai ka hoʻomanaʻo. No laila, no ka laʻana, e hoʻopau loa ʻia ka pūʻulu i koho ʻia i ka wā e wehe ai ke kelepona ZREM i ka mea hope. Akā, ʻae ʻia nā kaula e hoʻomanaʻo me ka ʻole o nā mea i loko.

hopena

He kūpono ʻo Redis Stream no ka hoʻokumu ʻana i nā mea hoʻolaha memo, nā queues memo, ka hoʻopaʻa inoa ʻana, a me nā ʻōnaehana kamaʻilio mālama moʻolelo.

E like me kaʻu i ʻōlelo ai Niklaus Wirth, ʻo nā polokalamu he algorithms me nā hoʻolālā ʻikepili, a ua hāʻawi mua ʻo Redis iā ʻoe ʻelua.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka