Redis Stream β€” надСТдност ΠΈ мащабируСмост Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ систСми Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ

Redis Stream β€” надСТдност ΠΈ мащабируСмост Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ систСми Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ

Redis Stream β€” Π½ΠΎΠ² абстрактСн Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ, прСдставСн Π² Redis с ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ Π½Π° вСрсия 5.0
ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»Π½ΠΎ Redis Stream Π΅ списък, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° добавятС записи. ВсСки запис ΠΈΠΌΠ° ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΏΡ€Π°ΡˆΠ²Π°Ρ‚Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΎΡ‚ записи ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ пристигат Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€žtail -fβ€œ Π² Unix, която ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π° Π»ΠΎΠ³ Ρ„Π°ΠΉΠ» ΠΈ остава Π² ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ. ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡΠ»ΡƒΡˆΠ°Π½ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ няколко ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ процСси β€žtail -fβ€œ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ Ρ„Π°ΠΉΠ» Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π±Π΅Π· Π΄Π° си ΠΏΡ€Π΅Ρ‡Π°Ρ‚.

Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ всички прСдимства Π½Π° новия Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ, Π½Π΅ΠΊΠ° Π±ΡŠΡ€Π·ΠΎ ΠΏΡ€ΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ дълго ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ структури Π² Redis, ΠΊΠΎΠΈΡ‚ΠΎ частично повтарят функционалността Π½Π° Redis Stream.

Redis PUB/SUB

Redis Pub/Sub Π΅ проста систСма Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, Π²Π΅Ρ‡Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π° във Π²Π°ΡˆΠ΅Ρ‚ΠΎ key-value Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Но Π·Π° простотата сС ΠΏΠ»Π°Ρ‰Π°:

  • Ако издатСлят ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° спрС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Ρ‚ΠΎΠΉ Π³ΡƒΠ±ΠΈ всички свои Π°Π±ΠΎΠ½Π°Ρ‚ΠΈ.
  • Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡΡ‚ трябва Π΄Π° Π·Π½Π°Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΡ‚ΠΎ мСстополоТСниС Π½Π° всички свои Π°Π±ΠΎΠ½Π°Ρ‚ΠΈ.
  • Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€ΠΈ Π°Π±ΠΎΠ½Π°Ρ‚ΠΈΡ‚Π΅ си, Π°ΠΊΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π³ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚.
  • Π‘ΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° ΠΎΡ‚ Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° издатСля Π²Π΅Π΄Π½Π°Π³Π° слСд публикацията, нСзависимо Π½Π° ΠΊΠΎΠ»ΠΊΠΎ Π°Π±ΠΎΠ½Π°Ρ‚ΠΈ Π΅ доставСно ΠΈ ΠΊΠΎΠ»ΠΊΠΎ Π±ΡŠΡ€Π·ΠΎ Ρ‚Π΅ успяват Π΄Π° обработят Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅.
  • Всички Π°Π±ΠΎΠ½Π°Ρ‚ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. АбонатитС сами трябва Π΄Π° сС споразумСят ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си Π·Π° Ρ€Π΅Π΄Π° Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅.
  • Няма Π²Π³Ρ€Π°Π΄Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ страна Π½Π° Π°Π±ΠΎΠ½Π°Ρ‚Π°. Ако Π°Π±ΠΎΠ½Π°Ρ‚ΡŠΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΏΠ°Π΄Π½Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°, издатСлят няма Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π·Π° Ρ‚ΠΎΠ²Π°.

Redis List

Redis List Π΅ структура ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, която ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ с Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° добавятС ΠΈ ΠΈΠ·Π²Π»ΠΈΡ‡Π°Ρ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈΠ»ΠΈ края Π½Π° списъка. На Π±Π°Π·Π°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ структура ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ стСк ΠΈΠ»ΠΈ опашка Π·Π° Π²Π°ΡˆΠ°Ρ‚Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° систСма ΠΈ Ρ‚ΠΎΠ²Π° Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ случаи Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ. ΠžΡΠ½ΠΎΠ²Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠΈ ΠΎΡ‚ Redis Pub/Sub са:

  • Π‘ΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС доставя Π½Π° Π΅Π΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΏΡŠΡ€Π²ΠΈ.
  • ΠšΠ»ΠΈΠ½Ρ‚ трябва сам Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° опСрацията Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. List Π½Π΅ Π·Π½Π°Π΅ Π½ΠΈΡ‰ΠΎ Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅.
  • Π‘ΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈ ΠΈΠ»ΠΈ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ. Ако стС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π»ΠΈ Redis ΡΡŠΡ€Π²ΡŠΡ€ Π΄Π° записва Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° диск, надСТдността Π½Π° систСмата Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ нараства.

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Stream

ДобавянС Π½Π° запис Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°

Команда XADD добавя Π½ΠΎΠ² запис Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π—Π°ΠΏΠΈΡΡŠΡ‚ Π½Π΅ Π΅ просто Π½ΠΈΠ·, Ρ‚ΠΎΠΉ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ няколко Π΄Π²ΠΎΠΉΠΊΠΈ ΠΊΠ»ΡŽΡ‡-стойност. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, всСки запис Π²Π΅Ρ‡Π΅ Π΅ структуриран ΠΈ наподобява структурата Π½Π° CSV Ρ„Π°ΠΉΠ».

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

Π’ горния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ добавямС Π² ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΈΠΌΠ΅ (ΠΊΠ»ΡŽΡ‡) Β«mystreamΒ» Π΄Π²Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π°: Β«sensor-idΒ» ΠΈ Β«temperatureΒ» с стойности Β«1234Β» ΠΈ Β«19.8Β» ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ. ΠšΠ°Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС присвоСн Π½Π° записа – Ρ‚ΠΎΠ·ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΅Π΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° всСки запис Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π² Ρ‚ΠΎΠ·ΠΈ случай ΠΏΡ€Π΅Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ *, Π·Π°Ρ‰ΠΎΡ‚ΠΎ искамС Redis Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½ΠΎΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π° нас. ВсСки Π½ΠΎΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‰Π΅ сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°. Π—Π°Ρ‚ΠΎΠ²Π° всСки Π½ΠΎΠ² запис Ρ‰Π΅ ΠΈΠΌΠ° ΠΏΠΎ-висок ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² сравнСниС с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ записи.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° записа, Π²ΡŠΡ€Π½Π°Ρ‚ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XADD, сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΄Π²Π΅ части:

{millisecondsTime}-{sequenceNumber}

millisecondsTime β€” Unix Π²Ρ€Π΅ΠΌΠ΅ Π² милисСкунди (Π²Ρ€Π΅ΠΌΠ΅ ΡΡŠΡ€Π²ΡŠΡ€ Redis). Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ запис, Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° врСмСвият ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ запис. Π—Π°Ρ‚ΠΎΠ²Π° Π°ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° сС Π²ΡŠΡ€Π½Π΅ Π½Π°Π·Π°Π΄, новият ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ всС ΠΎΡ‰Π΅ Ρ‰Π΅ Π·Π°ΠΏΠ°Π·ΠΈ свойството Π½Π° нарастванС.

sequenceNumber сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° записи, създадСни Π² Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° милисСкунда. sequenceNumber Ρ‰Π΅ сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ с 1 спрямо ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ запис. ПонСТС sequenceNumber ΠΈΠΌΠ° Ρ€Π°Π·ΠΌΠ΅Ρ€ 64 Π±ΠΈΡ‚Π°, Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π½Π΅ трябва Π΄Π° срСщнСтС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π² броя Π½Π° записитС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π½Π° милисСкунда.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ ΠΌΠΎΠΆΠ΅ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° странСн. НСдовСрчивият Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π» ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠΈΡ‚Π° Π·Π°Ρ‰ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π΅ част ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π΅, Ρ‡Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Redis ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ заявки Π·Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ. Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° създаванС Π½Π° записа, Ρ‚ΠΎΠ²Π° Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° заявки Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ. Π©Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към ΠΈΠ·ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XRANGE.

Ако ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π½Π° потрСбитСля ΠΌΡƒ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° посочи свой собствСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с някаква външна систСма, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XADD вмСсто Π·Π½Π°ΠΊΠ° * ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ:

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

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π² Ρ‚ΠΎΠ·ΠΈ случай трябва сами Π΄Π° слСдитС Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ минималният ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΅ "0-1", Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° няма Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Ρ€Π°Π²Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎ-малък ΠΎΡ‚ "0-1".

> XADD somestream 0-1 foo bar
(error) ERR Указаният ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² XADD Π΅ Ρ€Π°Π²Π΅Π½ Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎ-малък ΠΎΡ‚ Π½Π°ΠΉ-горния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°

Броят Π½Π° записитС Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°

МоТС Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ броят Π½Π° записитС Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°, просто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XLEN. Π—Π° нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ слСдната стойност:

> XLEN somestream
(цСлочислСно) 2

Π—Π°ΠΏΠΈΡ‚ΠΈ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ β€” XRANGE ΠΈ XREVRANGE

Π—Π° Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, трябва Π΄Π° посочим Π΄Π²Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° β€” Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈ края Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π’ΡŠΡ€Π½Π°Ρ‚ΠΈΡΡ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ‰Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π° всички Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅. Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΠΈ Π΄Π²Π° спСциални ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° β€ž-” ΠΈ β€ž+”, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ‚ Π½Π°ΠΉ-малкия (ΠΏΡŠΡ€Π²ΠΈΡΡ‚ запис) ΠΈ Π½Π°ΠΉ-голСмия (послСдният запис) ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Ρ‰Π΅ ΠΈΠ·Π²Π΅Π΄Π΅ всички записи ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

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

Всяка Π²ΡŠΡ€Π½Π°Ρ‚Π° запис прСдставлява масив ΠΎΡ‚ Π΄Π²Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ списък ΠΎΡ‚ Π΄Π²ΠΎΠΉΠΊΠΈ ΠΊΠ»ΡŽΡ‡-стойност. Π’Π΅Ρ‡Π΅ спомСнахмС, Ρ‡Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° записитС са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ запитвания Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° посочим Π² Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π΅ пълСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, a само Unix Π²Ρ€Π΅ΠΌΠ΅, пропускайки частта, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с sequenceNumber. ΠŸΡ€ΠΎΠΏΡƒΡΠ½Π°Ρ‚Π°Ρ‚Π° част Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ бъдС ΠΏΡ€ΠΈΡ€Π°Π²Π½Π΅Π½Π° Π½Π° Π½ΡƒΠ»Π° Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ Π½Π° максималната възмоТна стойност Π² края Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. По-Π΄ΠΎΠ»Ρƒ Π΅ Π΄Π°Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Π΄Π° поискатС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Ρ€Π°Π²Π΅Π½ Π½Π° Π΄Π²Π΅ милисСкунди.

> XRANGE mystream 1518951480106 1518951480107
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°"
      4) "19.8"

ИмамС само Π΅Π΄Π½ΠΎ запис Π² Ρ‚ΠΎΠ·ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π½ΠΎ Π² Ρ€Π΅Π°Π»Π½ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° XRANGE ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° опция COUNT. ΠŸΠΎΡΠΎΡ‡Π²Π°ΠΉΠΊΠΈ Π±Ρ€ΠΎΠΉ, ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ N записи. Ако трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ слСдващитС N записи (страниранС), ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ послСдния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ 1 към Π½Π΅Π³ΠΎ sequenceNumber ΠΈ Π΄Π° Π·Π°ΠΏΠΈΡ‚Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ. НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π° Π² слСдния ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Π΄Π° добавямС 10 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° XADD (Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ mystream Π²Π΅Ρ‡Π΅ Π΅ напълнСн с 10 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°). Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ итСрацията, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ ΠΏΠΎ 2 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ с пълСн Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π½ΠΎ с COUNT Ρ€Π°Π²Π΅Π½ Π½Π° 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"

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ итСрацията с слСдващитС Π΄Π²Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°, трябва Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ послСдния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ 1519073279157-0, ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ 1 към sequenceNumber.
РСзултантният ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π² Ρ‚ΠΎΠ·ΠΈ случай 1519073279157-1, Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ Π½ΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° Π½Π°Ρ‡Π°Π»ΠΎ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π° слСдващото ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ 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"

И Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ слоТността XRANGE Π΅ O(log (N)) Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ ΠΈ слСд Ρ‚ΠΎΠ²Π° O(M) Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° M Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°, всяка ΡΡ‚ΡŠΠΏΠΊΠ° ΠΎΡ‚ итСрацията Π΅ Π±ΡŠΡ€Π·Π°. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° XRANGE ΠΌΠΎΠΆΠ΅ΠΌ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄Π° ΠΈΡ‚Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ.

Команда XREVRANGE Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ Π½Π° XRANGE, Π½ΠΎ Π²Ρ€ΡŠΡ‰Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π² ΠΎΠ±Ρ€Π°Ρ‚Π΅Π½ Ρ€Π΅Π΄:

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

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XREVRANGE ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° start ΠΈ stop Π² ΠΎΠ±Ρ€Π°Ρ‚Π΅Π½ Ρ€Π΅Π΄.

Π§Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ записи с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° XREAD

ЧСсто възниква Π·Π°Π΄Π°Ρ‡Π° Π΄Π° сС Π°Π±ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ само Π½ΠΎΠ²ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π’Π°Π·ΠΈ концСпция ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° Redis Pub/Sub ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ Redis List, Π½ΠΎ ΠΈΠΌΠ° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ½ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠΈ Π² Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Redis Stream:

  1. Всяко Π½ΠΎΠ²ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ сС доставя Π½Π° всСки Π°Π±ΠΎΠ½Π°Ρ‚. Π’Π°Π·ΠΈ функционалност сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ блокиращия Redis List, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΡ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ‰Π΅ бъдС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΎ само ΠΎΡ‚ някой Π΅Π΄ΠΈΠ½ Π°Π±ΠΎΠ½Π°Ρ‚.
  2. Π”ΠΎΠΊΠ°Ρ‚ΠΎ Π² Redis Pub/Sub всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ сС забравят ΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ сС Π·Π°ΠΏΠ°Π·Π²Π°Ρ‚, Π² Stream всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π·Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ срок (освСн Π°ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅).
  3. Redis Stream позволява Π΄Π° сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Π² Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Π°Π±ΠΎΠ½Π°Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΈΠΆΠ΄Π° само Π»ΠΈΡ‡Π½Π°Ρ‚Π° си история Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π°Π±ΠΎΠ½ΠΈΡ€Π°Ρ‚Π΅ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ Π½ΠΎΠ²ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XREAD. Π’ΠΎΠ²Π° Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-слоТно ΠΎΡ‚ XRANGE, Π·Π°Ρ‚ΠΎΠ²Π° ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с ΠΏΠΎ-прости ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ.

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

Π’ горния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ посочСна Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰Π° Ρ„ΠΎΡ€ΠΌΠ°. XREADΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ опцията COUNT Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π°. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ СдинствСната Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π° опция Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π΅ опцията STREAMS, която Π·Π°Π΄Π°Π²Π° списък с ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π·Π°Π΅Π΄Π½ΠΎ с ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈΡ максималСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. НаписахмС Β«STREAMS mystream 0Β» β€” искамС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ всички записи ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° mystream с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΏΠΎ-голям ΠΎΡ‚ Β«0-0Β». ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π²Ρ€ΡŠΡ‰Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΏΠΎΠ½Π΅ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сС Π°Π±ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅ Π·Π° няколко ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠœΠΎΠΆΠ΅Ρ…ΠΌΠ΅ Π΄Π° напишСм Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Β«STREAMS mystream otherstream 0 0Β». ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ слСд опцията STREAMS трябва ΠΏΡŠΡ€Π²ΠΎ Π΄Π° прСдоставим ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° всички Π½ΡƒΠΆΠ½ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ, Π° Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° списък с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ.

Π’ Ρ‚Π°Π·ΠΈ проста Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Π½ΠΈΡ‰ΠΎ особСно Π² сравнСниС с XRANGE. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, интСрСсно Π΅, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ лСсно Π΄Π° ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅ΠΌ XREAD Π² Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, посочвайки Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° BLOCK:

> XREAD BLOCK 0 STREAMS mystream $

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎΡ‚ΠΎ ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ посочСна Π½ΠΎΠ²Π° опция BLOCK със срок Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ 0 милисСкунди (Ρ‚.Π΅. ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΎ Ρ‡Π°ΠΊΠ°Π½Π΅). ОсвСн Ρ‚ΠΎΠ²Π°, вмСсто Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ обикновСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° mystream, бСшС ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ спСциалСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ $. Π’ΠΎΠ·ΠΈ спСциалСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ XREAD трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° максималния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ° mystream. Π’Π°ΠΊΠ° Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ само Π½ΠΎΠ²ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° ΡΠ»ΡƒΡˆΠ°ΠΌΠ΅. Π’ извСстСн смисъл Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Unix ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Β«tail -fΒ».

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° опцията BLOCK Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ спСциалСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ $. МоТСм Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ всСки ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Ако Π΅ΠΊΠΈΠΏΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π°ΡˆΠ°Ρ‚Π° заявка Π²Π΅Π΄Π½Π°Π³Π°, Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅, Ρ‚ΠΎΠΉ Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Ρ‚ΠΎΠΉ Ρ‰Π΅ сС Π±Π»ΠΎΠΊΠΈΡ€Π°.

Π‘Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ XREAD ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΡΠ»ΡƒΡˆΠ° Π²Π΅Π΄Π½Π°Π³Π° няколко ΠΏΠΎΡ‚ΠΎΠΊΠ°, просто трябва Π΄Π° посочитС ΠΈΠΌΠ΅Π½Π°Ρ‚Π° ΠΈΠΌ. Π’ Ρ‚ΠΎΠ·ΠΈ случай Π΅ΠΊΠΈΠΏΡŠΡ‚ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ записа ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊ, Π² ΠΊΠΎΠΉΡ‚ΠΎ са ΠΏΠΎΡΡ‚ΡŠΠΏΠΈΠ»ΠΈ Π΄Π°Π½Π½ΠΈ. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ подписчик, Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄Π°Π½Π½ΠΈ ΠΏΡŠΡ€Π²ΠΈ.

Π“Ρ€ΡƒΠΏΠΈ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ искамС Π΄Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π½Π° подписчицитС Π΄ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Π² Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚ΠΎΠ²Π° Π΅ опашка ΠΎΡ‚ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°, позволявайки ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.

Ако си прСдставим, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚Ρ€ΠΈΠΌΠ° подписчици C1, C2, C3 ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ 1, 2, 3, 4, 5, 6, 7, обслуТванСто Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Ρ‰Π΅ сС случи, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ:

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

Π—Π° Π΄Π° постигнСм Ρ‚ΠΎΠ·ΠΈ Π΅Ρ„Π΅ΠΊΡ‚, Redis Stream ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° концСпция, Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° Π“Ρ€ΡƒΠΏΠ° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π’Π°Π·ΠΈ концСпция Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° псСвдо-подписчик, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС обслуТва ΠΎΡ‚ няколко подписчици Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°, прСдоставяйки ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ:

  1. Всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ сС доставя Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ подписчици Π² Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°.
  2. Π’ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° подписчицитС сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚ ΠΏΠΎ ΠΈΠΌΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ строка с ΠΎΠ³Π»Π΅Π΄ Π½Π° рСгистра. Ако някой подписчик Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΏΠ°Π΄Π½Π΅ ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°, Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈ Π² Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° с ΠΈΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΎ Π·Π° Π½Π΅Π³ΠΎ.
  3. Всяка Π“Ρ€ΡƒΠΏΠ° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ слСдва концСпцията Π·Π° "ΠΏΡŠΡ€Π²ΠΎ Π½Π΅ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅". ΠšΠΎΠ³Π°Ρ‚ΠΎ подписчик поиска Π½ΠΎΠ²ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ само Ρ‚Π΅Π·ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π° ΠΏΡ€Π΅Π΄ΠΈ Π½Π΅ са Π±ΠΈΠ»ΠΈ доставяни Π½Π° Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ подписчик Π² Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°.
  4. Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ подписчика. Π”ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ бъдС ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°, поисканото ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ‰Π΅ останС Π² статус "ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‰ΠΎ".
  5. Π’ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π“Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ всСки подписчик ΠΌΠΎΠΆΠ΅ Π΄Π° поиска история Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ доставСни ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅Π³ΠΎ, Π½ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ са Π±ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ (Π² статус "ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‰ΠΎ")

Π’ извСстСн смисъл, ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС прСдставСно Ρ‚Π°ΠΊΠ°:

+----------------------------------------+
| consumer_group_name: mygroup          
| consumer_group_stream: somekey        
| last_delivered_id: 1292309234234-92    
|                                                           
| consumers:                                          
|    "consumer-1" с Π½Π΅ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ  
|       1292309234234-4                          
|       1292309234232-8                          
|    "consumer-42" с Π½Π΅ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ 
|       ... (ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ)                             
+----------------------------------------+

Π‘Π΅Π³Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ с основнитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° Consumer Group, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

  • XGROUP ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС Π·Π° създаванС, ΡƒΠ½ΠΈΡ‰ΠΎΠΆΠ°Π²Π°Π½Π΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π³Ρ€ΡƒΠΏΠΈ
  • XREADGROUP ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€Π΅Π· Π³Ρ€ΡƒΠΏΠ°
  • XACK β€” ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° позволява Π½Π° Π°Π±ΠΎΠ½Π°Ρ‚Π° Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ

БъздаванС на Consumer Group

Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ mystream Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°. Π’ΠΎΠ³Π°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° създаванС Π½Π° Π³Ρ€ΡƒΠΏΠ° Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

> XGROUP Π‘ΠͺЗДАЙ mystream mygroup $
OK

ΠŸΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° трябва Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Ако искамС просто Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ всички Π½ΠΎΠ²ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ спСциалния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ $ (ΠΊΠ°ΠΊΡ‚ΠΎ Π² нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎ-Π³ΠΎΡ€Π΅). Ако вмСсто спСциалСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ посочим 0, Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π΅ създадСна, ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° Ρ‡Π΅Ρ‚Π΅ΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° XREADGROUP. Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° XREAD ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π½Π΅Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° опция BLOCK. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ° Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π° опция GROUP, която Π²ΠΈΠ½Π°Π³ΠΈ трябва Π΄Π° бъдС посочСна с Π΄Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ: ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π°Π±ΠΎΠ½Π°Ρ‚Π°. ΠžΠΏΡ†ΠΈΡΡ‚Π° COUNT ΡΡŠΡ‰ΠΎ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°.

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π½Π΅ΠΊΠ° поставим Ρ‚Π°ΠΌ няколко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ:

> 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

А сСга Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€Π΅Π· Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°:

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

Π“ΠΎΡ€Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°Π·Π²Π° слСдното:

«Аз, Алиса-Π°Π±ΠΎΠ½Π°Ρ‚, Ρ‡Π»Π΅Π½ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° mygroup, искам Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π° ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° mystream Π΅Π΄Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π° ΠΏΡ€Π΅Π΄ΠΈ Π½Π΅ Π΅ Π±ΠΈΠ»ΠΎ доставяно Π½Π° Π½ΠΈΠΊΠΎΠ³ΠΎ.Β»

ВсСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π°Π±ΠΎΠ½Π°Ρ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° опСрация с Π³Ρ€ΡƒΠΏΠ°, Ρ‚ΠΎΠΉ трябва Π΄Π° посочи своСто ΠΈΠΌΠ΅, Π·Π° Π΄Π° сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° нСдвусмислСно Π² Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°. Π’ Π³ΠΎΡ€Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ° ΠΎΡ‰Π΅ Π΅Π΄Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½Π° подробност β€” спСциалСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€ž>β€œ. Π’ΠΎΠ·ΠΈ спСциалСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, оставяйки само ΠΎΠ½Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π΅ са Π±ΠΈΠ»ΠΈ доставСни.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π² спСциални случаи ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС Ρ€Π΅Π°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠ°Ρ‚ΠΎ 0 ΠΈΠ»ΠΈ всСки Π΄Ρ€ΡƒΠ³ Π²Π°Π»ΠΈΠ΄Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XREADGROUP Ρ‰Π΅ Π²ΠΈ Π²ΡŠΡ€Π½Π΅ историята Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° със статус β€žpendingβ€œ, ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ доставСни Π½Π° посочСния Π°Π±ΠΎΠ½Π°Ρ‚ (Алис), Π½ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ са Π±ΠΈΠ»ΠΈ ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π° XACK.

МоТСм Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π²Π΅Π΄Π½Π°Π³Π° посочвайки ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° 0, Π±Π΅Π· опция COUNT. ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ СдинствСното Ρ‡Π°ΠΊΠ°Ρ‰ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ с ΡΠ±ΡŠΠ»ΠΊΠ°Ρ‚Π°:

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

Но Π°ΠΊΠΎ ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ, Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ няма Π΄Π° сС ΠΏΠΎΠΊΠ°Π·Π²Π°:

> XACK mystream mygroup 1526569495631-0
(integer) 1
> XREADGROUP GROUP mygroup Alice STREAMS mystream 0
1) 1) "mystream"
   2) (ΠΏΡ€Π°Π·Π΅Π½ списък ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚)

Π‘Π΅Π³Π° Π΄ΠΎΠΉΠ΄Π΅ Ρ€Π΅Π΄ΡŠΡ‚ Π½Π° Π‘ΠΎΠ± Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ Π½Π΅Ρ‰ΠΎ:

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

Π‘ΠΎΠ±, Ρ‡Π»Π΅Π½ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° mygroup, поиска Π½Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΄Π²Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΡΡŠΠΎΠ±Ρ‰Π°Π²Π° само Π·Π° нСдоставСнитС ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΏΠΎΡ€Π°Π΄ΠΈ спСциалния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€ž>β€œ. ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ β€žappleβ€œ Π½Π΅ сС ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π΅ доставСно Π½Π° Алиса, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π‘ΠΎΠ± ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° β€žorangeβ€œ ΠΈ β€žstrawberryβ€œ.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Алиса, Π‘ΠΎΠ± ΠΈ всСки Π΄Ρ€ΡƒΠ³ Π°Π±ΠΎΠ½Π°Ρ‚ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ. Π’Π΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ своята история Π½Π° Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ.

Има няколко Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄:

  • Π’Π΅Π΄Π½ΡŠΠΆ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π°Π±ΠΎΠ½Π°Ρ‚ΡŠΡ‚ счита ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄Π° XREADGROUP, Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ β€žpendingβ€œ ΠΈ сС ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π° към Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Π°Π±ΠΎΠ½Π°Ρ‚. Π”Ρ€ΡƒΠ³ΠΈ Π°Π±ΠΎΠ½Π°Ρ‚ΠΈ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅.
  • АбонатитС сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ спомСнаванС, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ явно.
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° XREADGROUP ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ няколко Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°, трябва ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π³Ρ€ΡƒΠΏΠΈ с Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ΅ Π·Π° всСки ΠΏΠΎΡ‚ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° XGROUP

Π’ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ слСд срив

ΠΠ±ΠΎΠ½Π°Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈ слСд срив ΠΈ Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° своя списък със ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² статус Β«ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅Β». Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π² рСалния свят Π°Π±ΠΎΠ½Π°Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС провалят ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎ. Какво сС случва със Π·Π°Π±Π°Π²Π΅Π½ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π½Π° Π°Π±ΠΎΠ½Π°Ρ‚Π°, Π°ΠΊΠΎ Ρ‚ΠΎΠΉ Π½Π΅ успСС Π΄Π° сС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈ слСд срив?
Consumer Group ΠΏΡ€Π΅Π΄Π»Π°Π³Π° функция, която сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° Ρ‚Π°ΠΊΠΈΠ²Π° случаи β€” ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½ΠΈΠΊΡŠΡ‚ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°.

ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XPENDING, която ΠΏΠΎΠΊΠ°Π·Π²Π° всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π² статус Β«ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅Β». Π’ Π½Π°ΠΉ-простата си Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° само с Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°:

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

ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΈΠ·Π²Π΅Π΄Π΅ броя Π½Π° Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° цялата Π³Ρ€ΡƒΠΏΠ° ΠΈ Π·Π° всСки Π°Π±ΠΎΠ½Π°Ρ‚. ИмамС само Π‘ΠΎΠ± с Π΄Π²Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ СдинствСното ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, поискано ΠΎΡ‚ Алисa, бСшС ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° XACK.

МоТСм Π΄Π° поискамС Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ:

НСподписан {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]

{start-id} {end-id} β€” Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ (ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Β«-Β» ΠΈ Β«+Β»)
{count} β€” броя Π½Π° ΠΎΠΏΠΈΡ‚ΠΈΡ‚Π΅ Π·Π° доставка
{consumer-name} β€” ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°

> 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

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ Π·Π° всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΈΠΌΠ΅ Π½Π° Π°Π±ΠΎΠ½Π°Ρ‚Π°, Π²Ρ€Π΅ΠΌΠ΅ Π½Π° прСстой Π² милисСкунди ΠΈ, накрая, Π±Ρ€ΠΎΠΉ ΠΎΠΏΠΈΡ‚ΠΈ Π·Π° доставка. ИмамС Π΄Π²Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ Π‘ΠΎΠ±, ΠΈ Ρ‚Π΅ просто Ρ‡Π°ΠΊΠ°Ρ‚ Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 74170458 милисСкунди, ΠΎΠΊΠΎΠ»ΠΎ 20 часа.

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π½ΠΈ ΠΏΡ€Π΅Ρ‡ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π±ΠΈΠ»ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, просто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ XRANGE.

> XRANGE mystream 1526569498055-0 1526569498055-0
1) 1) 1526569498055-0
   2) 1) "ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"
      2) "ΠΏΠΎΡ€Ρ‚ΠΎΠΊΠ°Π»"

ΠŸΡ€ΠΎΡΡ‚ΠΎ трябва Π΄Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ ΡΡŠΡ‰ΠΈΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅. Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ някаква прСдстава, Алисa ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π΅ΡˆΠΈ, Ρ‡Π΅ слСд 20 часа прСстой Π‘ΠΎΠ± вСроятно няма Π΄Π° сС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈ ΠΈ Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° поиска Ρ‚Π΅Π·ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ Π΄Π° възобнови тяхната ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° вмСсто Π‘ΠΎΠ±. Π—Π° Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XCLAIM:

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

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ "Ρ‡ΡƒΠΆΠ΄ΠΎ" ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ смСним собствСника Π½Π° {consumer}. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ {min-idle-time}. Π’ΠΎΠ²Π° ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ ситуация, ΠΏΡ€ΠΈ която Π΄Π²Π°ΠΌΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° смСнят собствСника Π½Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ:

ΠšΠ»ΠΈΠ΅Π½Ρ‚ 1: XCLAIM mystream mygroup Алиса 3600000 1526569498055-0
ΠšΠ»ΠΈΠ΅Π½Ρ‚ 2: XCLAIM mystream mygroup Π›ΠΎΡ€Π° 3600000 1526569498055-0

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ‰Π΅ Π½ΡƒΠ»ΠΈΡ€Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ ΠΈ Ρ‰Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ броя Π½Π° доставкитС. Π’Π°ΠΊΠ° вторият ΠΊΠ»ΠΈΠ΅Π½Ρ‚ няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅.

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

Π‘ΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ бСшС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ поискано ΠΎΡ‚ Алиса, която сСга ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈ.

ΠžΡ‚ горния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ изпълнСниС Π½Π° Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π²Ρ€ΡŠΡ‰Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° самото ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ. ΠžΠΏΡ†ΠΈΡΡ‚Π° JUSTID ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ само Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π°ΠΊΠΎ Π½Π΅ Π²ΠΈ интСрСсуват Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ искатС Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚Π΅ производитСлността Π½Π° систСмата.

Брояч Π½Π° доставкитС

Брояч, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°Ρ‚Π΅ Π² ΠΈΠ·Ρ…ΠΎΠ΄Π° XPENDING β€” Ρ‚ΠΎΠ²Π° Π΅ броят Π½Π° доставкитС Π·Π° всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Π’ΠΎΠ·ΠΈ брояч нараства ΠΏΠΎ Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½Π°: ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ поискано Ρ‡Ρ€Π΅Π· XCLAIM ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° XREADGROUP.

Нормално Π΅ някои ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ доставяни няколко ΠΏΡŠΡ‚ΠΈ. Най-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ са ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ. Понякога ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° самото ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π³Ρ€Π΅ΡˆΠΊΠ° Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‡Π°. Π’ Ρ‚Π°ΠΊΡŠΠ² случай ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Ρ‰Π΅ Π΅ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. ПонСТС ΠΈΠΌΠ°ΠΌΠ΅ брояч Π½Π° ΠΎΠΏΠΈΡ‚ΠΈΡ‚Π΅ Π·Π° доставка, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ брояч, Π·Π° Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΈΠ²Π° ситуации. Π—Π°Ρ‚ΠΎΠ²Π°, Π²Π΅Π΄Π½Π°Π³Π° Ρ‰ΠΎΠΌ Π±Ρ€ΠΎΡΡ‡ΡŠΡ‚ Π½Π° доставкитС достигнС Π·Π°Π΄Π°Π΄Π΅Π½ΠΎΡ‚ΠΎ ΠΎΡ‚ вас голямо число, вСроятно Ρ‰Π΅ бъдС Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π΄Π° поставитС Ρ‚Π°ΠΊΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π΄Π° ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚Π΅ систСмния администратор.

Π‘ΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅

Команда XINFO сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° информация относно ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Π³Ρ€ΡƒΠΏΠΈ. НапримСр, основната Ρ„ΠΎΡ€ΠΌΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

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

ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΠ±Ρ‰Π°Ρ‚Π° информация Π·Π° зададСния ΠΏΠΎΡ‚ΠΎΠΊ. Π‘Π΅Π³Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-слоТСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

> XINFO GROUPS mystream
1) 1) ΠΈΠΌΠ΅
   2) "mygroup"
   3) ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ
   4) (цСлочислСно) 2
   5) Π² ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅
   6) (цСлочислСно) 2
2) 1) ΠΈΠΌΠ΅
   2) "some-other-group"
   3) ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ
   4) (цСлочислСно) 1
   5) Π² ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅
   6) (цСлочислСно) 0

ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΠ±Ρ‰Π°Ρ‚Π° информация Π·Π° всички Π³Ρ€ΡƒΠΏΠΈ Π½Π° зададСния ΠΏΠΎΡ‚ΠΎΠΊ

> XINFO CONSUMERS mystream mygroup
1) 1) ΠΈΠΌΠ΅
   2) "Alice"
   3) Π² ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅
   4) (цСлочислСно) 1
   5) Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½
   6) (цСлочислСно) 9104628
2) 1) ΠΈΠΌΠ΅
   2) "Bob"
   3) Π² ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅
   4) (цСлочислСно) 1
   5) Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½
   6) (цСлочислСно) 83841983

ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π° информация Π·Π° всички Π°Π±ΠΎΠ½Π°Ρ‚ΠΈ Π½Π° зададСния ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°.
Ако Π·Π°Π±Ρ€Π°Π²ΠΈΡ‚Π΅ синтаксиса Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, просто поискатС ΠΏΠΎΠΌΠΎΡ‰ ΠΎΡ‚ самата ΠΊΠΎΠΌΠ°Π½Π΄Π°:

> XINFO HELP
1) XINFO {subcommand} arg arg ... arg. ΠŸΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ са:
2) CONSUMERS {key} {groupname}  -- Показва потрСбитСлскитС Π³Ρ€ΡƒΠΏΠΈ Π½Π° Π³Ρ€ΡƒΠΏΠ° {groupname}.
3) GROUPS {key}                 -- Показва потрСбитСлскитС Π³Ρ€ΡƒΠΏΠΈ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.
4) STREAM {key}                 -- Показва информация Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.
5) HELP                         -- ΠŸΡ€ΠΈΠ½Ρ‚ΠΈΡ€Π° Ρ‚Π°Π·ΠΈ ΠΏΠΎΠΌΠΎΡ‰.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°

Много прилоТСния Π½Π΅ искат Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΎ. ЧСсто Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ максимално допустимо количСство ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ случаи Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Π΄Ρ€ΡƒΠ³ΠΎ постоянно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΏΡ€ΠΈ достиганС Π½Π° зададСния Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° MAXLEN Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° 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
(цСлочислСно) 2
> XRANGE mystream - +
1) 1) 1526654999635-0
   2) 1) "value"
      2) "2"
2) 1) 1526655000369-0
   2) 1) "value"
      2) "3"

ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° MAXLEN старитС записи Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ ΠΏΡ€ΠΈ достиганС Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° дълТина, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ ΠΈΠΌΠ° постоянСн Ρ€Π°Π·ΠΌΠ΅Ρ€. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, отрязванСто Π² Ρ‚ΠΎΠ·ΠΈ случай Π½Π΅ става ΠΏΠΎ Π½Π°ΠΉ-производитСлния Π½Π°Ρ‡ΠΈΠ½ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° Redis. Битуацията ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

XADD mystream MAXLEN ~ 1000 * ... ΠΏΠΎΠ»Π΅Ρ‚Π° Π½Π° Π²Ρ…ΠΎΠ΄Π° Ρ‚ΡƒΠΊ ...

ΠΡ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ ~ Π² горния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°ΠΌΠ΅ Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° стойност. Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС всяко число, ΠΏΠΎ-голямо ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π½Π° 1000 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 1000, 1010 ΠΈΠ»ΠΈ 1030). ΠŸΡ€ΠΎΡΡ‚ΠΎ ясно ΡƒΠΊΠ°Π·Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ искамС ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ Π½ΠΈ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ 1000 записа. Π’ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π° Π²ΡŠΡ‚Ρ€Π΅ Π² Redis.

Има ΠΈ ΠΎΡ‚Π΄Π΅Π»Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° XTRIM, която изпълнява ΡΡŠΡ‰ΠΎΡ‚ΠΎ:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ рСпликация

Redis Stream асинхронно Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π° Π½Π° slave възли ΠΈ сС Π·Π°ΠΏΠ°Π·Π²Π° Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ Ρ‚ΠΈΠΏ AOF (снимка Π½Π° всички Π΄Π°Π½Π½ΠΈ) ΠΈ RDB (Π»ΠΎΠ³ Π½Π° всички ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ запис). ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° сС ΠΈ рСпликация Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Consumer Groups. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π°ΠΊΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π² статус β€žpendingβ€œ Π½Π° master възСла, Ρ‚ΠΎ Π½Π° slave Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ‰Π΅ ΠΈΠΌΠ° ΡΡŠΡ‰ΠΈΡ статус.

Π˜Π·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°

Π—Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° спСциална ΠΊΠΎΠΌΠ°Π½Π΄Π° XDEL. ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ слСдват ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ:

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

ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° трябва Π΄Π° сС Π²Π·Π΅ΠΌΠ΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° фактичСски няма Π΄Π° бъдС освободСна Π²Π΅Π΄Π½Π°Π³Π°.

ΠŸΠΎΡ‚ΠΎΠΊ с Π½ΡƒΠ»Π΅Π²Π° дълТина

Π Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠΈΡ‚Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ структури ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π² Redis Π΅, Ρ‡Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ структури нямат Π²Π΅Ρ‡Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π² сСбС си, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° самата структура Ρ‰Π΅ бъдС ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. НапримСр, сортираният Π½Π°Π±ΠΎΡ€ Ρ‰Π΅ бъдС напълно ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ZREM ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ послСдния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚. ВмСсто Ρ‚ΠΎΠ²Π°, ΠΏΠΎΡ‚ΠΎΠΊΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° останат Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π΄ΠΎΡ€ΠΈ ΠΈ Π±Π΅Π· Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π²ΡŠΡ‚Ρ€Π΅.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Redis Stream Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π·Π° създаванС Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, опашки Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ ΠΆΡƒΡ€Π½Π°Π»ΠΈ ΠΈ Ρ‡Π°Ρ‚ систСми, ΠΊΠΎΠΈΡ‚ΠΎ Π·Π°ΠΏΠ°Π·Π²Π°Ρ‚ история.

ΠšΠ°ΠΊΡ‚ΠΎ вСднъТ ΠΊΠ°Π·Π° Никлаус Π’ΠΈΡ€Ρ‚, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ β€” Ρ‚ΠΎΠ²Π° са Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ плюс структури ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Π° Redis Π²Π΅Ρ‡Π΅ Π²ΠΈ Π΄Π°Π²Π° ΠΈ Π΄Π²Π΅Ρ‚Π΅.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster