Redis Stream - kev ntseeg siab thiab kev ua kom muaj peev xwm ntawm koj lub tshuab xa xov

Redis Stream - kev ntseeg siab thiab kev ua kom muaj peev xwm ntawm koj lub tshuab xa xov

Redis Stream yog hom ntaub ntawv paub daws teeb tshiab tau qhia hauv Redis nrog version 5.0
Conceptually, Redis kwj yog ib Daim Ntawv Teev Npe uas koj tuaj yeem ntxiv nkag. Txhua qhov nkag muaj tus cim tshwj xeeb. Los ntawm lub neej ntawd, tus ID yuav raug tsim tawm thiab suav nrog lub sijhawm. Yog li ntawd, koj tuaj yeem nug cov ntaub ntawv ntau lub sijhawm, lossis tau txais cov ntaub ntawv tshiab thaum nws tuaj txog hauv cov kwj deg, zoo li Unix "tail -f" hais kom nyeem cov ntaub ntawv teev tseg thiab khov thaum tos cov ntaub ntawv tshiab. Nco ntsoov tias ntau tus neeg siv tuaj yeem mloog cov xov tib lub sijhawm, ib yam li ntau cov txheej txheem "tail -f" tuaj yeem nyeem cov ntaub ntawv ib txhij yam tsis muaj teeb meem nrog ib leeg.

Txhawm rau nkag siab tag nrho cov txiaj ntsig ntawm hom ntaub ntawv tshiab, cia peb saib sai sai ntawm cov qauv Redis ntev uas muaj feem cuam tshuam txog kev ua haujlwm ntawm Redis Stream.

Redis PUB/SUB

Redis Pub/Sub yog qhov kev xa xov yooj yim uas twb tau tsim rau hauv koj lub khw tseem ceeb. Txawm li cas los xij, simplicity los ntawm tus nqi:

  • Yog tias tus tshaj tawm rau qee yam ua tsis tiav, ces nws poob tag nrho nws cov neeg siv khoom
  • Tus tshaj tawm yuav tsum paub qhov chaw nyob ntawm tag nrho nws cov neeg siv khoom
  • Tus tshaj tawm tuaj yeem tshaj tawm nws cov neeg siv khoom nrog kev ua haujlwm yog tias cov ntaub ntawv luam tawm sai dua li nws tau ua tiav
  • Cov lus raug muab tshem tawm ntawm tus tshaj tawm tsis pub dhau tam sim ntawd tom qab tshaj tawm, txawm tias muaj pes tsawg tus neeg siv nws tau xa mus rau thiab sai npaum li cas lawv tuaj yeem ua cov lus no.
  • Txhua tus neeg siv yuav tau txais cov lus tib lub sijhawm. Cov neeg sau npe lawv tus kheej yuav tsum pom zoo nrog lawv tus kheej ntawm qhov kev txiav txim ntawm kev ua cov lus tib yam.
  • Tsis muaj ib lub tswv yim tsim los kom paub meej tias tus neeg siv khoom tau ua tiav cov lus. Yog tias tus neeg siv khoom tau txais cov lus thiab teeb meem thaum ua tiav, tus tshaj tawm yuav tsis paub txog nws.

Redis List

Redis List yog cov qauv ntaub ntawv uas txhawb nqa thaiv kev nyeem cov lus txib. Koj tuaj yeem ntxiv thiab nyeem cov lus los ntawm qhov pib lossis xaus ntawm daim ntawv. Raws li cov qauv no, koj tuaj yeem ua ib pawg zoo lossis kab rau koj qhov system faib, thiab feem ntau qhov no yuav txaus. Qhov sib txawv tseem ceeb ntawm Redis Pub / Sub:

  • Cov lus xa mus rau ib tus neeg siv khoom. Thawj tus nyeem-thaiv tus neeg siv yuav tau txais cov ntaub ntawv ua ntej.
  • Clint yuav tsum pib ua haujlwm nyeem rau txhua cov lus nws tus kheej. Cov npe tsis paub dab tsi txog cov neeg siv khoom.
  • Cov lus raug khaws cia kom txog thaum ib tug neeg nyeem lawv lossis qhia meej meej lawv. Yog tias koj teeb tsa Redis neeg rau zaub mov kom yaug cov ntaub ntawv mus rau disk, tom qab ntawd qhov kev ntseeg tau ntawm lub kaw lus nce ntau.

Taw qhia rau kwj

Ntxiv ib qho kev nkag mus rau kwj

pab neeg XADD ntxiv ib qho tshiab nkag rau hauv kwj. Cov ntaub ntawv tsis yog ib txoj hlua xwb, nws muaj ib lossis ntau qhov tseem ceeb-tus nqi khub. Yog li, txhua qhov kev nkag tau raug teeb tsa thiab zoo ib yam li cov qauv ntawm CSV cov ntaub ntawv.

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

Hauv qhov piv txwv saum toj no, peb ntxiv ob daim teb rau cov kwj deg nrog lub npe (qhov tseem ceeb) "mystream": "sensor-id" thiab "kub" nrog rau qhov tseem ceeb "1234" thiab "19.8", feem. Raws li qhov kev sib cav thib ob, cov lus txib yuav siv tus cim uas yuav raug xa mus rau qhov nkag - tus cim no tshwj xeeb txheeb xyuas txhua qhov nkag hauv kwj. Txawm li cas los xij, qhov no peb dhau * vim peb xav kom Redis tsim tus ID tshiab rau peb. Txhua tus ID tshiab yuav nce ntxiv. Yog li ntawd, txhua qhov kev nkag tshiab yuav muaj tus lej siab dua nyob rau hauv kev cuam tshuam nrog cov ntawv nkag dhau los.

Tus ID hom

Tus ID nkag mus rov qab los ntawm cov lus txib XADD, muaj ob ntu:

{millisecondsTime}-{sequenceNumber}

millisecondsTime - Unix lub sijhawm hauv milliseconds (Lub sijhawm Redis server). Txawm li cas los xij, yog tias lub sijhawm tam sim no zoo ib yam lossis tsawg dua lub sijhawm ntawm cov ntaub ntawv teev tseg dhau los, ces lub sijhawm teev ntawm cov ntaub ntawv dhau los yog siv. Yog li ntawd, yog hais tias lub sij hawm neeg rau zaub mov rov qab mus rau lub sij hawm, tus tshiab identifier tseem yuav khaws cov khoom increment.

tus lej siv rau cov ntaub ntawv tsim nyob rau hauv tib millisecond. tus lej yuav tau nce los ntawm 1 txheeb ze rau qhov nkag dhau los. Vim lub tus lej yog 64 me ntsis hauv qhov loj me, tom qab ntawd hauv kev xyaum koj yuav tsum tsis txhob khiav mus rau qhov txwv ntawm cov ntaub ntawv uas tuaj yeem tsim tawm hauv ib millisecond.

Cov hom ntawv ntawm cov cim no yuav zoo li coj txawv txawv thaum xub thawj siab ib muag. Ib tus neeg nyeem tsis ntseeg yuav xav paub yog vim li cas lub sijhawm yog ib feem ntawm tus cim. Yog vim li cas yog Redis ntws txhawb ntau cov lus nug los ntawm ID. Txij li thaum tus txheeb ze muaj feem xyuam nrog lub sij hawm cov ntaub ntawv tau tsim, qhov no ua rau nws muaj peev xwm nug lub sij hawm ntau yam. Peb yuav saib ib qho piv txwv tshwj xeeb thaum peb saib cov lus txib XRANGE.

Yog tias qee qhov laj thawj tus neeg siv yuav tsum tau qhia nws tus kheej tus lej, uas, piv txwv li, cuam tshuam nrog qee qhov system sab nraud, ces peb tuaj yeem dhau mus rau qhov hais kom ua. XADD hloov * raws li qhia hauv qab no:

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

Thov nco ntsoov tias nyob rau hauv rooj plaub no koj yuav tsum saib xyuas tus ID nce koj tus kheej. Hauv peb qhov piv txwv, tus cim yam tsawg kawg nkaus yog "0-1", yog li cov lus txib yuav tsis lees txais lwm tus cim uas sib npaug lossis tsawg dua "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

Tus naj npawb ntawm cov ntaub ntawv ib kwj

Nws yog ua tau kom tau txais cov naj npawb ntawm cov ntaub ntawv nyob rau hauv ib tug kwj tsuas yog siv cov lus txib XLEN. Rau peb qhov piv txwv, qhov lus txib no yuav rov qab tus nqi hauv qab no:

> XLEN somestream
(integer) 2

Ntau cov lus nug - XRANGE thiab XREVRANGE

Txhawm rau thov cov ntaub ntawv los ntawm ntau yam, peb yuav tsum qhia ob lub cim - qhov pib thiab qhov kawg ntawm qhov ntau. Cov khoom xa rov qab yuav suav tag nrho cov ntsiab lus, suav nrog cov ciam teb. Kuj tseem muaj ob lub cim tshwj xeeb "-" thiab "+", raws li lub ntsiab lus tsawg tshaj plaws (thawj cov ntaub ntawv) thiab qhov loj tshaj (cov ntaub ntawv kawg) tus lej hauv cov kwj deg. Cov piv txwv hauv qab no yuav sau tag nrho cov kwj nkag.

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

Txhua cov ntaub ntawv xa rov qab yog ib qho ntawm ob lub ntsiab lus: tus cim thiab cov npe ntawm tus nqi tseem ceeb. Peb twb tau hais tias cov ntaub ntawv teev npe muaj feem cuam tshuam nrog lub sijhawm. Yog li ntawd, peb tuaj yeem thov ntau yam ntawm lub sijhawm tshwj xeeb. Txawm li cas los xij, peb tuaj yeem hais qhia hauv qhov kev thov tsis yog tus cim tag nrho, tab sis tsuas yog lub sijhawm Unix, tshem tawm qhov cuam tshuam nrog tus lej. Qhov kev tshem tawm ntawm tus cim yuav cia li teem rau xoom thaum pib ntawm qhov ntau thiab mus rau qhov siab tshaj plaws ntawm qhov kawg ntawm qhov ntau. Hauv qab no yog ib qho piv txwv ntawm qhov koj tuaj yeem thov qhov ntau ntawm ob milliseconds.

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

Peb tsuas muaj ib qho nkag rau hauv qhov ntau no, txawm li cas los xij hauv cov ntaub ntawv tiag tiag cov txiaj ntsig rov qab tuaj yeem loj heev. Vim li no XRANGE txhawb COUNT kev xaiv. Los ntawm kev qhia qhov ntau, peb tuaj yeem tau txais thawj N cov ntaub ntawv. Yog tias peb xav tau cov ntaub ntawv N tom ntej (pagination), peb tuaj yeem siv tus lej uas tau txais zaum kawg, nce nws tus lej los ntawm ib tug thiab nug dua. Cia peb saib qhov no hauv qhov piv txwv hauv qab no. Peb pib ntxiv 10 yam nrog XADD (xav tias mystream twb tau sau nrog 10 yam). Txhawm rau pib qhov iteration tau txais 2 lub ntsiab lus ib qho lus txib, peb pib nrog ntau yam tab sis nrog COUNT sib npaug rau 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"

Txhawm rau txuas ntxiv iterating nrog ob lub ntsiab lus tom ntej, peb yuav tsum xaiv tus ID kawg tau txais, piv txwv li 1519073279157-0, thiab ntxiv 1 rau tus lej.
Qhov tshwm sim ID, nyob rau hauv cov ntaub ntawv no 1519073279157-1, tam sim no siv tau raws li qhov pib tshiab ntawm ntau qhov kev sib cav rau kev hu mus tom ntej 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"

Thiab li ntawd. Vim complexity XRANGE yog O(log(N)) mus nrhiav thiab ces O(M) rov qab M cov ntsiab lus, ces txhua kauj ruam iteration yog ceev. Yog li, siv XRANGE cov kwj deg tuaj yeem rov ua tau zoo.

pab neeg XREVRANGE yog qhov sib npaug XRANGE, tab sis rov qab cov ntsiab lus rov qab:

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

Thov nco ntsoov tias cov lus txib XREVRANGE siv ntau qhov kev sib cav pib thiab nres hauv qhov kev txiav txim rov qab.

Nyeem cov ntawv tshiab siv XREAD

Feem ntau cov haujlwm tshwm sim ntawm kev tso npe rau hauv kwj thiab tau txais cov lus tshiab nkaus xwb. Lub tswv yim no yuav zoo ib yam li Redis Pub / Sub lossis thaiv Redis List, tab sis muaj qhov sib txawv hauv kev siv Redis Stream:

  1. Txhua cov lus tshiab raug xa mus rau txhua tus neeg siv khoom los ntawm lub neej ntawd. Tus cwj pwm no txawv ntawm qhov thaiv Redis List, qhov twg cov lus tshiab tsuas yog nyeem los ntawm ib tus neeg siv khoom xwb.
  2. Thaum nyob rau hauv Redis Pub/Sub tag nrho cov lus tsis nco qab thiab yeej tsis nyob twj ywm, hauv kwj tag nrho cov lus tau khaws cia tsis tu ncua (tshwj tsis yog tus neeg siv tau qhia meej meej ua rau tshem tawm).
  3. Redis Stream tso cai rau koj sib txawv nkag mus rau cov lus hauv ib lub kwj. Ib tus neeg siv khoom tshwj xeeb tuaj yeem pom lawv tus kheej cov lus keeb kwm.

Koj tuaj yeem sau npe rau ib txoj xov thiab tau txais cov lus tshiab siv cov lus txib XREAD. Nws yog me ntsis nyuab dua XRANGE, yog li peb yuav pib nrog cov piv txwv yooj yim ua ntej.

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

Cov piv txwv saum toj no qhia txog daim ntawv tsis thaiv XREAD. Nco ntsoov tias COUNT kev xaiv yog xaiv tau. Qhov tseeb, qhov kev xaiv tsuas yog xav tau yog qhov kev xaiv STREAMS, uas qhia meej cov npe ntawm cov kwj deg nrog rau tus lej siab tshaj plaws. Peb tau sau "STREAMS mystream 0" - peb xav tau txais tag nrho cov ntaub ntawv ntawm mystream kwj nrog tus cim ntau dua "0-0". Raws li koj tuaj yeem pom los ntawm qhov piv txwv, cov lus txib rov qab lub npe ntawm cov xov vim peb tuaj yeem sau npe rau ntau cov xov tib lub sijhawm. Peb tuaj yeem sau, piv txwv li, "STREAMS mystream otherstream 0 0". Thov nco ntsoov tias tom qab qhov kev xaiv STREAMS peb yuav tsum xub muab cov npe ntawm tag nrho cov kwj deg uas xav tau thiab tsuas yog tom qab ntawd cov npe ntawm cov cim.

Hauv daim ntawv yooj yim no cov lus txib tsis ua dab tsi tshwj xeeb piv rau XRANGE. Txawm li cas los xij, qhov nthuav yog tias peb tuaj yeem tig tau yooj yim XREAD mus rau qhov thaiv kev hais kom ua, qhia meej txog qhov kev sib cav BLOCK:

> XREAD BLOCK 0 STREAMS mystream $

Hauv qhov piv txwv saum toj no, qhov kev xaiv BLOCK tshiab tau teev tseg nrog lub sijhawm ntawm 0 milliseconds (qhov no txhais tau tias tos tsis kawg). Ntxiv mus, es tsis txhob hla tus cim ib txwm rau cov kwj mystream, tus cim tshwj xeeb $ tau dhau lawm. Tus cim tshwj xeeb no txhais tau tias XREAD yuav tsum siv tus lej siab tshaj plaws hauv mystream ua tus cim. Yog li ntawd, peb tsuas yog tau txais cov lus tshiab pib txij thaum peb pib mloog. Hauv qee txoj kev no zoo ib yam li Unix "tail -f" hais kom ua.

Nco ntsoov tias thaum siv BLOCK kev xaiv peb tsis tas yuav siv tus cim tshwj xeeb $. Peb tuaj yeem siv txhua tus cim uas muaj nyob hauv cov kwj deg. Yog tias pab neeg tuaj yeem pab peb qhov kev thov tam sim tsis muaj kev thaiv, nws yuav ua li ntawd, txwv tsis pub nws yuav thaiv.

Thaiv XREAD tuaj yeem mloog ntau cov xov ib zaug, koj tsuas yog xav tau qhia lawv lub npe. Hauv qhov no, cov lus txib yuav xa rov qab cov ntaub ntawv ntawm thawj kwj uas tau txais cov ntaub ntawv. Thawj tus neeg siv tau thaiv rau ib qho xov yuav tau txais cov ntaub ntawv ua ntej.

Pab pawg neeg siv khoom

Hauv qee qhov haujlwm, peb xav kom txwv cov neeg siv nkag mus rau cov lus hauv ib txoj xov. Ib qho piv txwv uas qhov no tuaj yeem pab tau yog cov kab lus nrog cov neeg ua haujlwm uas yuav tau txais cov lus sib txawv los ntawm cov xov, tso cai rau kev xa xov mus rau qhov ntsuas.

Yog tias peb xav txog tias peb muaj peb tus neeg C1, C2, C3 thiab cov xov uas muaj cov lus 1, 2, 3, 4, 5, 6, 7, ces cov lus yuav tau txais kev pabcuam raws li hauv daim duab hauv qab no:

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

Txhawm rau ua tiav cov txiaj ntsig no, Redis Stream siv lub tswv yim hu ua Consumer Group. Lub tswv yim no zoo ib yam li pseudo-subscriber, uas tau txais cov ntaub ntawv los ntawm cov kwj deg, tab sis tau txais kev pab los ntawm ntau tus neeg hauv ib pab pawg, muab qee yam kev lees paub:

  1. Txhua cov lus raug xa mus rau cov neeg siv khoom sib txawv hauv pawg.
  2. Hauv ib pab pawg, cov neeg sau npe raug txheeb xyuas los ntawm lawv lub npe, uas yog cov ntaub ntawv tseem ceeb. Yog tias tus neeg siv khoom tau tso tawm ib ntus tawm ntawm pab pawg, nws tuaj yeem rov qab mus rau pab pawg siv nws lub npe tshwj xeeb.
  3. Txhua Pawg Neeg Siv Khoom ua raws li "thawj cov lus tsis tau nyeem" lub tswv yim. Thaum tus neeg siv khoom thov cov lus tshiab, nws tsuas tuaj yeem tau txais cov lus uas tsis tau xa yav dhau los rau ib tus neeg siv khoom hauv pab pawg.
  4. Muaj lus txib kom qhia meej meej tias cov lus tau ua tiav los ntawm tus neeg siv khoom. Kom txog rau thaum cov lus txib no raug hu, cov lus thov yuav nyob twj ywm hauv qhov "tseem tos".
  5. Hauv Pawg Neeg Siv Khoom, txhua tus neeg siv khoom tuaj yeem thov keeb kwm ntawm cov lus uas tau xa tuaj rau nws, tab sis tseem tsis tau ua tiav (hauv qhov "tseem tos" xwm txheej)

Hauv kev nkag siab, lub xeev ntawm pab pawg tuaj yeem qhia tau raws li hauv qab no:

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

Tam sim no nws yog lub sijhawm kom paub txog cov lus txib tseem ceeb rau Pawg Neeg Siv Khoom, uas yog:

  • XGROUP siv los tsim, rhuav tshem thiab tswj cov pab pawg
  • XREADGROUP siv los nyeem kwj ntawm pab pawg
  • XACK - Cov lus txib no tso cai rau tus neeg siv los cim cov lus ua tiav tiav

Tsim Cov Neeg Siv Khoom Pab Pawg

Cia peb xav tias mystream twb muaj lawm. Tom qab ntawd pawg tsim cov lus txib yuav zoo li:

> XGROUP CREATE mystream mygroup $
OK

Thaum tsim ib pab pawg, peb yuav tsum dhau tus cim, pib los ntawm cov pab pawg yuav tau txais cov lus. Yog tias peb tsuas yog xav tau txais txhua cov lus tshiab, ces peb tuaj yeem siv tus cim tshwj xeeb $ (raws li peb qhov piv txwv saum toj no). Yog tias koj teev 0 tsis yog tus cim tshwj xeeb, ces tag nrho cov lus hauv xov yuav muaj rau pawg.

Tam sim no cov pab pawg tau tsim, peb tuaj yeem pib nyeem cov lus tam sim ntawd siv cov lus txib XREADGROUP. Cov lus txib no zoo ib yam li XREAD thiab txhawb kev xaiv BLOCK xaiv. Txawm li cas los xij, muaj qhov xav tau GROUP kev xaiv uas yuav tsum tau teev tseg nrog ob qhov kev sib cav: pawg npe thiab cov npe npe. Qhov kev xaiv COUNT kuj tau txais kev txhawb nqa.

Ua ntej nyeem cov xov, cia peb muab qee cov lus rau hauv:

> 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

Tam sim no cia peb sim nyeem cov kwj dej no los ntawm pab pawg:

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

Cov lus txib saum toj no nyeem verbatim raws li hauv qab no:

"Kuv, tus neeg sau npe Alice, tus tswv cuab ntawm pawg neeg, xav nyeem ib cov lus los ntawm mystream uas tsis tau xa mus rau leej twg ua ntej."

Txhua lub sij hawm tus neeg siv khoom ua haujlwm ntawm ib pab pawg, nws yuav tsum muab nws lub npe, cim nws tus kheej hauv pab pawg. Muaj ib qho tseem ceeb tshaj plaws nyob rau hauv cov lus txib saum toj no - tus cim tshwj xeeb ">". Tus cim tshwj xeeb no lim cov lus, tsuas yog cov uas tsis tau xa ua ntej.

Tsis tas li ntawd, nyob rau hauv cov xwm txheej tshwj xeeb, koj tuaj yeem hais qhia tus lej tiag tiag xws li 0 lossis lwm tus lej siv tau. Hauv qhov no cov lus txib XREADGROUP yuav rov qab koj cov keeb kwm ntawm cov lus nrog cov xwm txheej ntawm "sib tos" uas tau xa mus rau cov neeg teev npe (Alice) tab sis tseem tsis tau lees paub siv cov lus txib XACK.

Peb tuaj yeem kuaj tus cwj pwm no los ntawm kev qhia tam sim ID 0, yam tsis muaj kev xaiv COUNT. Peb yuav tsuas pom ib qho lus tseem tos, uas yog, cov lus apple:

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

Txawm li cas los xij, yog tias peb paub meej tias cov lus ua tiav, ces nws yuav tsis tshwm sim ntxiv lawm:

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

Tam sim no nws yog Bob tig los nyeem ib yam dab tsi:

> 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, ib tug tswv cuab ntawm mygroup, thov kom tsis pub ntau tshaj ob lo lus. Cov lus txib tsuas yog tshaj tawm cov lus tsis xa tawm vim yog tus cim tshwj xeeb ">". Raws li koj tuaj yeem pom, cov lus "apple" yuav tsis tshwm sim vim nws twb tau xa mus rau Alice, yog li Bob tau txais "txiv kab ntxwv" thiab "strawberry".

Txoj kev no, Alice, Bob, thiab lwm tus neeg rau hauv pab pawg tuaj yeem nyeem cov lus sib txawv ntawm tib lub kwj dej. Lawv kuj tuaj yeem nyeem lawv cov keeb kwm ntawm cov lus tsis tau ua tiav lossis kos cov lus ua tiav.

Muaj ob peb yam uas yuav tsum nco ntsoov:

  • Sai li tus neeg siv khoom xav tias cov lus yuav yog ib qho lus txib XREADGROUP, cov lus no nkag mus rau hauv lub xeev "tseem tos" thiab raug xa mus rau tus neeg siv khoom tshwj xeeb. Lwm pab pawg neeg yuav tsis tuaj yeem nyeem cov lus no.
  • Cov neeg sau npe yuav raug tsim raws li thawj qhov kev hais tawm, tsis tas yuav tsum tau tsim kom meej meej.
  • Nrog kev pab los ntawm XREADGROUP Koj tuaj yeem nyeem cov lus los ntawm ntau cov xov sib txawv tib lub sijhawm, txawm li cas los xij rau qhov no ua haujlwm koj yuav tsum xub tsim cov pab pawg nrog tib lub npe rau txhua txoj xov siv. XGROUP

Kev kho mob tom qab ua tsis tiav

Tus neeg siv khoom tuaj yeem rov qab los ntawm qhov tsis ua haujlwm thiab rov nyeem nws cov npe ntawm cov lus nrog "tseem tos". Txawm li cas los xij, hauv lub ntiaj teb tiag tiag, cov neeg siv khoom yuav kawg ua tsis tiav. Yuav ua li cas tshwm sim rau tus neeg siv khoom cov lus daig yog tias tus neeg siv khoom tsis tuaj yeem rov qab los ntawm qhov tsis ua tiav?
Pab pawg neeg siv khoom muaj qhov tshwj xeeb uas siv rau cov xwm txheej zoo li no - thaum koj xav hloov tus tswv ntawm cov lus.

Thawj qhov koj yuav tsum tau ua yog hu rau cov lus txib XPENDING, uas qhia tag nrho cov lus nyob rau hauv pab pawg nrog cov xwm txheej "tseem tos". Hauv nws daim ntawv yooj yim tshaj plaws, cov lus txib raug hu nrog tsuas yog ob qhov kev sib cav: xov lub npe thiab cov npe pab pawg:

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

Pab pawg tau nthuav tawm cov xov tooj uas tsis tau ua tiav rau tag nrho pab pawg thiab rau txhua tus neeg siv khoom. Peb tsuas muaj Bob nrog ob cov lus zoo heev vim tias tsuas yog cov lus Alice thov tau lees paub nrog XACK.

Peb tuaj yeem thov cov ntaub ntawv ntxiv los ntawm kev sib cav ntau dua:

XPENDING {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]
{start-id} {end-id} - ntau yam ntawm cov cim (koj tuaj yeem siv "-" thiab "+")
{count} β€” tus naj npawb ntawm kev xa khoom
{consumer-name} - pawg npe

> 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

Tam sim no peb muaj cov ntsiab lus rau txhua cov lus: ID, tus neeg siv npe npe, lub sijhawm tsis ua haujlwm hauv milliseconds thiab thaum kawg tus naj npawb ntawm kev xa khoom. Peb muaj ob cov lus los ntawm Bob thiab lawv tau nyob twj ywm rau 74170458 milliseconds, txog 20 teev.

Thov nco ntsoov tias tsis muaj leej twg txwv tsis pub peb los ntawm kev tshuaj xyuas cov ntsiab lus ntawm cov lus tau yooj yim los ntawm kev siv XRANGE.

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

Peb tsuas yog yuav tsum tau rov ua tus lej qub ob zaug hauv cov lus sib cav. Tam sim no peb muaj qee lub tswv yim, Alice yuav txiav txim siab tias tom qab 20 teev ntawm kev poob qis, Bob tej zaum yuav tsis rov qab los, thiab nws yog lub sijhawm los nug cov lus thiab rov ua haujlwm rau Bob. Rau qhov no peb siv cov lus txib XCLAIM:

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

Siv cov lus txib no, peb tuaj yeem tau txais cov lus "hloov txawv teb chaws" uas tseem tsis tau ua tiav los ntawm kev hloov tus tswv rau {neeg siv}. Txawm li cas los xij, peb tuaj yeem muab lub sijhawm tsis ua haujlwm yam tsawg kawg nkaus {min-idle-time}. Qhov no pab kom tsis txhob muaj qhov xwm txheej uas ob tus neeg siv khoom sim ua ib txhij hloov tus tswv ntawm tib cov lus:

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

Thawj tus neeg siv khoom yuav rov pib lub sijhawm poob thiab nce lub txee xa khoom. Yog li tus neeg thib ob yuav tsis tuaj yeem thov nws.

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

Cov lus tau ua tiav los ntawm Alice, uas tam sim no tuaj yeem ua cov lus thiab lees paub nws.

Los ntawm cov piv txwv saum toj no, koj tuaj yeem pom tias qhov kev thov ua tiav rov qab cov ntsiab lus ntawm cov lus nws tus kheej. Txawm li cas los xij, qhov no tsis tsim nyog. Qhov kev xaiv JUSTID tuaj yeem siv los xa rov qab cov ntawv IDs nkaus xwb. Qhov no yog qhov muaj txiaj ntsig yog tias koj tsis txaus siab rau cov ntsiab lus ntawm cov lus thiab xav ua kom lub cev ua haujlwm tau zoo.

Xa khoom txee

Lub txee koj pom hauv cov zis XPENDING yog tus naj npawb ntawm kev xa khoom ntawm txhua cov lus. Xws li lub txee yog nce hauv ob txoj hauv kev: thaum cov lus tau thov tiav ntawm XCLAIM los yog thaum siv hu XREADGROUP.

Nws yog ib txwm muaj rau qee cov lus xa ntau zaus. Qhov tseem ceeb tshaj plaws yog tias tag nrho cov lus tau ua tiav thaum kawg. Qee lub sij hawm muaj teeb meem tshwm sim thaum ua cov lus vim hais tias cov lus nws tus kheej yog corrupted, los yog kev ua cov lus ua rau ib qho yuam kev nyob rau hauv tus handler code. Hauv qhov no, nws yuav tig tawm tias tsis muaj leej twg yuav ua tau cov lus no. Txij li thaum peb muaj lub txee sim xa khoom, peb tuaj yeem siv lub txee no txhawm rau txheeb xyuas cov xwm txheej zoo li no. Yog li ntawd, thaum tus nqi xa mus txog tus lej siab uas koj tau teev tseg, nws yuav zoo dua los muab cov lus no rau lwm cov xov thiab xa ntawv ceeb toom rau tus thawj tswj hwm.

Xov Xwm Xeev

pab neeg XINFO siv los thov ntau yam ntaub ntawv hais txog ib tug xov thiab nws pawg. Piv txwv li, cov lus txib yooj yim zoo li no:

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

Cov lus txib saum toj no qhia cov ntaub ntawv dav dav txog cov kwj dej uas tau teev tseg. Tam sim no ib qho piv txwv me ntsis nyuaj dua:

> 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

Cov lus txib saum toj no qhia cov ntaub ntawv dav dav rau txhua pawg ntawm cov xov uas tau teev tseg

> 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

Cov lus txib saum toj no qhia cov ntaub ntawv rau txhua tus neeg siv ntawm cov kwj dej thiab pab pawg.
Yog tias koj tsis nco qab cov lus txib syntax, tsuas yog nug cov lus txib nws tus kheej kom pab:

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

kwj loj txwv

Ntau daim ntawv thov tsis xav sau cov ntaub ntawv rau hauv kwj mus ib txhis. Nws yog feem ntau pab tau kom muaj ntau tshaj plaws ntawm cov lus tso cai rau ib txoj xov. Hauv lwm qhov xwm txheej, nws yog qhov tseem ceeb kom txav tag nrho cov lus los ntawm ib lub xov mus rau lwm lub khw muag khoom tsis tu ncua thaum cov xov xov loj tau mus txog. Koj tuaj yeem txwv qhov loj me ntawm cov kwj uas siv MAXLEN parameter hauv cov lus txib 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"

Thaum siv MAXLEN, cov ntaub ntawv qub raug tshem tawm thaum lawv ncav cuag qhov ntev, yog li cov kwj muaj qhov loj me. Txawm li cas los xij, pruning nyob rau hauv rooj plaub no tsis tshwm sim nyob rau hauv txoj kev ua tau zoo tshaj plaws hauv Redis nco. Koj tuaj yeem txhim kho qhov xwm txheej hauv qab no:

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

Qhov kev sib cav ~ hauv qhov piv txwv saum toj no txhais tau hais tias peb tsis tas yuav txwv qhov ntev kwj mus rau tus nqi tshwj xeeb. Hauv peb qhov piv txwv, qhov no tuaj yeem yog tus lej ntau dua lossis sib npaug rau 1000 (piv txwv li, 1000, 1010, lossis 1030). Peb tsuas yog qhia meej tias peb xav kom peb cov kwj deg khaws tsawg kawg 1000 cov ntaub ntawv. Qhov no ua rau kev tswj kev nco tau zoo dua hauv Redis.

Kuj tseem muaj ib pab neeg sib cais XTRIM, uas ua tib yam:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

Tsis tu ncua cia thiab replication

Redis Stream yog asynchronously replicated rau qhev nodes thiab khaws tseg rau cov ntaub ntawv xws li AOF (snapshot ntawm tag nrho cov ntaub ntawv) thiab RDB (log ntawm tag nrho cov sau ua hauj lwm). Replication ntawm Consumer Groups xeev kuj tau txais kev txhawb nqa. Yog li, yog tias cov lus nyob rau hauv "tseem tos" raws li txoj cai ntawm tus tswv node, ces ntawm tus qhev nodes cov lus no yuav muaj tib yam xwm txheej.

Tshem tawm tus kheej cov ntsiab lus los ntawm kwj

Muaj lus txib tshwj xeeb kom tshem tawm cov lus XDEL. Cov lus txib tau txais lub npe ntawm cov xov raws li cov lus IDs yuav tsum tau muab tshem tawm:

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

Thaum siv cov lus txib no, koj yuav tsum coj mus rau hauv tus account tias lub cim xeeb tiag tiag yuav tsis raug tso tawm tam sim ntawd.

Zero length kwj

Qhov sib txawv ntawm cov kwj thiab lwm cov ntaub ntawv Redis cov qauv yog tias thaum lwm cov ntaub ntawv cov qauv tsis muaj cov ntsiab lus hauv lawv, raws li kev phiv, cov ntaub ntawv qauv nws tus kheej yuav raug tshem tawm ntawm lub cim xeeb. Yog li, piv txwv li, cov txheej txheem yuav raug tshem tawm tag nrho thaum ZREM hu tshem tawm cov khoom kawg. Hloov chaw, cov xov raug tso cai nyob hauv lub cim xeeb txawm tias tsis muaj cov ntsiab lus hauv.

xaus

Redis Stream yog qhov zoo tshaj plaws rau kev tsim cov lus sib tham, xov xwm kab, kev sib koom ua ke, thiab keeb kwm kev sib tham.

Raws li kuv ib zaug hais Niklaus Wirth, cov kev pab cuam yog algorithms ntxiv rau cov ntaub ntawv qauv, thiab Redis twb muab rau koj ob leeg.

Tau qhov twg los: www.hab.com

Ntxiv ib saib