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 Π΅ проста систСма Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, която Π²Π΅Ρ‡Π΅ Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π° във Π²Π°ΡˆΠ΅Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΠΊΠ»ΡŽΡ‡-стойност. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, простотата си ΠΈΠΌΠ° Ρ†Π΅Π½Π°:

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

Redis списък

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 Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½ΠΎΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π° нас. ВсСки Π½ΠΎΠ² ID Ρ‰Π΅ сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ всСки Π½ΠΎΠ² запис Ρ‰Π΅ ΠΈΠΌΠ° ΠΏΠΎ-висок ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² сравнСниС с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ записи.

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

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

{millisecondsTime}-{sequenceNumber}

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

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

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

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

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

Моля, ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π² Ρ‚ΠΎΠ·ΠΈ случай трябва сами Π΄Π° Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°Ρ‚Π΅ нарастванСто Π½Π° ID. Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ минималният ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΅ "0-1", Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° няма Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Ρ€Π°Π²Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎ-малък ΠΎΡ‚ "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

Π‘Ρ€ΠΎΠΉ записи Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ

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

> XLEN somestream
(integer) 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"

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

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

ИмамС само Π΅Π΄ΠΈΠ½ запис Π² Ρ‚ΠΎΠ·ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π½ΠΎ Π² Ρ€Π΅Π°Π»Π½ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π²ΡŠΡ€Π½Π°Ρ‚ΠΈΡΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° XRANGE ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° опцията COUNT. ΠšΠ°Ρ‚ΠΎ посочим количСството, ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ N записа. Ако трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ слСдващитС N записа (страниранС), ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ послСдния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ID, Π΄Π° Π³ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ послСдоватСлСн Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΠΏΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ. НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π° Π² слСдния ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Π΄Π° добавямС 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 към послСдоватСлСн Π½ΠΎΠΌΠ΅Ρ€.
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π² Ρ‚ΠΎΠ·ΠΈ случай 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 ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° концСпция, Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° Consumer Group. Π’Π°Π·ΠΈ концСпция Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° псСвдо-Π°Π±ΠΎΠ½Π°Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС обслуТва ΠΎΡ‚ мноТСство Π°Π±ΠΎΠ½Π°Ρ‚ΠΈ Π² Π³Ρ€ΡƒΠΏΠ°, прСдоставяйки ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ:

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

Π’ извСстСн смисъл ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

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

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

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

БъздаванС Π½Π° потрСбитСлска Π³Ρ€ΡƒΠΏΠ°

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

> XGROUP CREATE mystream mygroup $
OK

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

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π΅ създадСна, ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° Ρ‡Π΅Ρ‚Π΅ΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° XREADGROUP. Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° XREAD ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π½Π΅Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° опция Π‘Π›ΠžΠšΠ˜Π ΠΠΠ•. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π° опция 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"

Π“ΠΎΡ€Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° гласи дословно, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

β€žΠΠ·, Π°Π±ΠΎΠ½Π°Ρ‚ Алис, Ρ‡Π»Π΅Π½ Π½Π° моята Π³Ρ€ΡƒΠΏΠ°, искам Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π° Π΅Π΄Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ моя ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π° ΠΏΡ€Π΅Π΄ΠΈ Π½Π΅ Π΅ Π±ΠΈΠ»ΠΎ доставяно Π½Π° Π½ΠΈΠΊΠΎΠ³ΠΎ.β€œ

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

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

МоТСм Π΄Π° тСствамС Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠ°Ρ‚ΠΎ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ посочим ID 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) (empty list or set)

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

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

Π‘ΠΎΠ±, Ρ‡Π»Π΅Π½ Π½Π° моята Π³Ρ€ΡƒΠΏΠ°, поиска Π½Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΄Π²Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΎΡ‚Ρ‡ΠΈΡ‚Π° само нСдоставСни ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΏΠΎΡ€Π°Π΄ΠΈ спСциалния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ">". ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ "ябълка" няма Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π΅ доставСно Π½Π° Алис, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π‘ΠΎΠ± ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° "ΠΏΠΎΡ€Ρ‚ΠΎΠΊΠ°Π»" ΠΈ "ягода".

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

Врябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ няколко Π½Π΅Ρ‰Π°:

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

Π’ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΏΡ€ΠΈ срив

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

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

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

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

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

XPENDING {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

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

Моля, ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π½ΠΈ спира Π΄Π° провСрявамС ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, просто ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ XRANGE.

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

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

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

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

Client 1: XCLAIM mystream mygroup Alice 3600000 1526569498055-0
Clinet 2: XCLAIM mystream mygroup Lora 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) 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

Π“ΠΎΡ€Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΠ±Ρ‰Π° информация Π·Π° всички Π³Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ посочСната нишка

> 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

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

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

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

Много прилоТСния Π½Π΅ искат Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²ΠΈΠ½Π°Π³ΠΈ. ЧСсто Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ максималСн Π±Ρ€ΠΎΠΉ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° нишка. Π’ Π΄Ρ€ΡƒΠ³ΠΈ случаи Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° прСмСститС всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ Π΅Π΄Π½Π° нишка Π² Π΄Ρ€ΡƒΠ³ΠΎ постоянно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС достигнС посочСният Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° 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
(integer) 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 * ... entry fields here ...

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

Има ΠΈ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π΅ΠΊΠΈΠΏ XTRIM, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ ΡΡŠΡ‰ΠΎΡ‚ΠΎ:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

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

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

ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ

Има спСциална ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ 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 Π²Π΅Ρ‡Π΅ Π²ΠΈ Π΄Π°Π²Π° ΠΈ Π΄Π²Π΅Ρ‚Π΅.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€