Programmēšana

Kā izmantot Redis Streams

Roshans Kumars ir uzņēmuma Redis Labs vecākais produktu vadītājs.

Redis, atmiņā ievietotā daudzmodeļu datu bāze, ir populāra daudzos gadījumos. Tie ietver satura kešatmiņu, sesiju veikalus, reāllaika analīzi, ziņojumu starpniecību un datu straumēšanu. Pagājušajā gadā es rakstīju par to, kā reāllaika straumes apstrādei izmantot Redis Pub / Sub, Lists un Sorted Sets. Tagad, kad ieradīsies Redis 5.0, Redis ir pilnīgi jauna datu struktūra, kas paredzēta straumju pārvaldīšanai.

Izmantojot Redis Streams datu struktūru, jūs varat darīt daudz vairāk nekā tas, kas bija iespējams ar krodziņu / apakšdaļu, sarakstiem un sakārtotajiem kopām. Starp daudzajām priekšrocībām Redis Streams ļauj jums rīkoties šādi:

  • Savāciet lielu datu apjomu, kas nonāk lielā ātrumā (vienīgais sastrēgums ir jūsu tīkla I / O);
  • Izveidot datu kanālu starp daudziem ražotājiem un daudziem patērētājiem;
  • Efektīvi pārvaldiet savu datu patēriņu pat tad, ja ražotāji un patērētāji nedarbojas vienādi;
  • Saglabājiet datus, kad jūsu klienti ir bezsaistē vai ir atvienoti;
  • Asinhroni sazināties starp ražotājiem un patērētājiem;
  • Mērogojiet savu patērētāju skaitu;
  • Ieviest darījumiem līdzīgu datu drošību, kad patērētāji neizdodas, patērējot datus; un
  • Efektīvi izmantojiet galveno atmiņu.

Vislabākā Redis Stream daļa ir tā, ka tā ir iebūvēta Redis, tāpēc Redis Stream izvietošanai vai pārvaldībai nav nepieciešamas papildu darbības. Šajā rakstā es iepazīstināšu ar Redis Stream izmantošanas pamatiem. Mēs aplūkosim, kā mēs varam pievienot datus straumei un kā mēs varam tos nolasīt (visus uzreiz, asinhroni, tā ienākot utt.), Lai apmierinātu dažādus patērētāja lietošanas gadījumus.

Divos nākamajos rakstos šeit es apspriedīšu, kā darbojas Redis Streams patērētāju grupas, un parādīšu darba lietojumprogrammu, kurā tiek izmantotas Redis Streams.

Izprotiet datu plūsmu Redis straumēs

Redis Streams nodrošina “tikai pievienot” datu struktūru, kas šķiet līdzīga žurnāliem. Tas piedāvā komandas, kas ļauj jums pievienot avotus straumēm, patērēt straumes un pārraudzīt un pārvaldīt, kā tiek patērēti dati. Stream datu struktūra ir elastīga, ļaujot vairākos veidos savienot ražotājus un patērētājus.

Redis Labs

1. attēlā parādīta Redis Stream pamata izmantošana. Viens datu ražotājs darbojas kā datu avots, un tā patērētājs ir ziņojumapmaiņas lietojumprogramma, kas nosūta datus attiecīgajiem saņēmējiem.

Redis Labs

2. attēlā kopēju datu plūsmu patērē vairāki patērētāji. Izmantojot Redis Streams, klienti var lasīt un analizēt datus savā tempā.

Nākamajā lietojumā, kas parādīts 3. attēlā, lietas kļūst nedaudz sarežģītākas. Šis pakalpojums saņem datus no vairākiem ražotājiem un glabā tos visus Redis Streams datu struktūrā. Lietojumprogrammā ir vairāki patērētāji, kuri lasa datus no Redis Streams, kā arī patērētāju grupa, kas atbalsta patērētājus, kuri nevar darboties tādā pašā ātrumā kā ražotāji.

Redis Labs

Pievienojiet datus straumei, izmantojot Redis straumes

3. attēlā redzamā diagramma parāda tikai vienu veidu, kā pievienot datus Redis straumei. Lai gan viens vai vairāki ražotāji var pievienot datus datu struktūrai, visi jaunie dati vienmēr tiek pievienoti straumes beigām.

Noklusējuma metode datu pievienošanai

Šis ir vienkāršākais veids, kā pievienot datus Redis straumēs:

XADD mystream * vārds Anna

XADD mystream * vārds Bērts

XADD mystream * vārds Katija

Šajā komandā XADD ir Redis komanda, mystream ir straumes nosaukums, Anna, Bert un Cathy ir katrā rindā pievienotie vārdi, un * operators liek Redis automātiski ģenerēt katras rindas identifikatoru. Šīs komandas rezultātā tiek izveidoti trīs mystream ieraksti:

1518951481323-0 vārds Katija

1518951480723-0 vārds Berts

1518951480106-0 vārds Anna

Datu pievienošana ar lietotāja pārvaldītiem ID katram ierakstam

Redis dod iespēju katram ierakstam saglabāt savu identifikatoru (skatīt zemāk). Lai gan dažos gadījumos tas var būt noderīgi, parasti ir vienkāršāk paļauties uz automātiski ģenerētiem ID.

XADD mystream 10000000 vārds Anna

XADD mystream 10000001 nosaukums Bert

XADD mystream 10000002 nosaukums Cathy

Tā rezultātā rodas šādi mystream ieraksti:

10000002-0 vārds Katija

10000001-0 vārds Berts

10000000-0 vārds Anna

Datu pievienošana ar maksimālo ierobežojumu

Jūs varat ierobežot straumi ar maksimālo ierakstu skaitu:

XADD mystream MAXLEN 1000000 * vārds Anna

XADD mystream MAXLEN 1000000 * nosaukums Bert

XADD mystream MAXLEN 1000000 * vārds Cathy

Šī komanda izdzina vecākus ierakstus, kad straume sasniedz aptuveni 1 000 000.

Padoms. Redis Streams datus glabā radix koka makro mezglos. Katrā makro mezglā ir daži datu vienumi (parasti dažu desmitu diapazonā). Pievienojot aptuveno MAXLEN vērtību, kā parādīts zemāk, jums nevajadzēs manipulēt ar makro mezglu katram ievietojumam. Ja dažiem desmitiem skaitļu, piemēram, 1000000 vai 1000050, jums ir maza atšķirība, jūs varētu optimizēt savu sniegumu, izsaucot komandu ar aptuveno rakstzīmi (~).

XADD mystream MAXLEN ~ 1000000 * vārds Anna

XADD mystream MAXLEN ~ 1000000 * vārds Bērts

XADD mystream MAXLEN ~ 1000000 * vārds Cathy

Patērējiet datus no straumes, izmantojot Redis Streams

Redis Streams struktūra piedāvā bagātīgu komandu un funkciju kopumu, lai dažādos veidos varētu patērēt jūsu datus.

Lasiet visu no straumes sākuma

Situācija: straumē jau ir dati, kas jums jāapstrādā, un jūs vēlaties tos visus apstrādāt no paša sākuma.

Komanda, kuru izmantosiet, ir XREAD, kas ļauj jums izlasīt visus vai pirmos N ierakstus no straumes sākuma. Kā paraugpraksi vienmēr ieteicams izlasīt datus pa lappusēm. Lai lasītu līdz 100 ierakstiem no straumes sākuma, komanda ir šāda:

XREAD COUNT 100 STREAMS mystream 0

Pieņemot, ka 1518951481323-0 ir pēdējais vienuma ID, ko saņēmāt iepriekšējā komandā, jūs varat izgūt nākamos 100 ierakstus, palaižot:

XREAD COUNT 100 STREAMS mystream 1518951481323-1

Datus patērē asinhroni (izmantojot bloķējošu zvanu)

Situācija: jūsu patērētājs patērē un apstrādā datus ātrāk nekā ātrums, kādā dati tiek pievienoti straumei.

Ir daudzi lietošanas gadījumi, kad patērētājs lasa ātrāk, nekā ražotāji pievieno datus jūsu straumei. Šajos scenārijos vēlaties, lai patērētājs gaida un saņem paziņojumu par jaunu datu saņemšanu. Opcija Bloķēt ļauj norādīt, cik ilgi jāgaida jauni dati: 

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Šeit XREAD atgriež visus datus pēc 1518951123456-1. Ja pēc tam nav datu, vaicājums gaidīs N = 60 sekundes, līdz ieradīsies jauni dati, un pēc tam noildze. Ja vēlaties bezgalīgi bloķēt šo komandu, izsauciet XREAD šādi:

XREAD BLOCK 0 STREAMS mystream 1518951123456-1 

Piezīme: Šajā piemērā datus var izgūt arī pa lappusēm, izmantojot komandu XRANGE. 

Lasiet tikai jaunos datus, kad tie tiek saņemti

Situācija: Jūs esat ieinteresēts apstrādāt tikai jauno datu kopu, sākot no pašreizējā laika.

Atkārtoti lasot datus, vienmēr ir ieteicams atsākt darbu ar to, kur esat beidzis. Piemēram, iepriekšējā piemērā veicāt bloķējošu zvanu, lai lasītu datus, kas lielāki par 1518951123456-1. Tomēr, lai sāktu, jūs, iespējams, nezināt jaunāko personu apliecinošo dokumentu. Šādos gadījumos straumi var sākt lasīt ar zīmi $, kas komandai XREAD liek izgūt tikai jaunus datus. Tā kā šajā zvanā BLOCK opcija tiek izmantota ar 60 sekundēm, tā gaidīs, kamēr straumē būs daži dati.

XREAD BLOCK 60000 STREAMS mystream $

Šajā gadījumā jūs sāksit lasīt jaunus datus, izmantojot opciju $. Tomēr jums nevajadzētu veikt turpmākus zvanus, izmantojot opciju $. Piemēram, ja 1518951123456-0 ir iepriekšējos zvanos iegūto datu ID, nākamajam zvanam jābūt:

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Atkārtojiet straumi, lai lasītu iepriekšējos datus

Situācija: jūsu datu straumē jau ir pietiekami daudz datu, un jūs vēlaties to vaicāt, lai analizētu līdz šim apkopotos datus.

Datus starp diviem ierakstiem var nolasīt gan virzienā uz priekšu, gan atpakaļ, izmantojot attiecīgi XRANGE un XREVRANGE. Šajā piemērā komanda nolasa datus starp 1518951123450-0 un 1518951123460-0:

XRANGE mystream 1518951123450-0 1518951123460-0

XRANGE arī ļauj ierobežot atgriezto vienumu skaitu, izmantojot opciju COUNT. Piemēram, šis vaicājums atgriež pirmos 10 vienumus starp diviem intervāliem. Izmantojot šo opciju, jūs varētu atkārtot straumēšanu, kā to darāt ar komandu SCAN:

XRANGE mystream 1518951123450-0 1518951123460-0 COUNT 10

Ja nezināt vaicājuma apakšējo vai augšējo robežu, apakšējo robežu varat aizstāt ar - un augšējo - ar +. Piemēram, šis vaicājums atgriež pirmos 10 vienumus no straumes sākuma:

XRANGE mystream - + COUNT 10

XREVRANGE sintakse ir līdzīga XRANGE, izņemot to, ka jūs maināt apakšējo un augšējo robežu secību. Piemēram, šis vaicājums atgriež pirmos 10 vienumus no straumes beigām apgrieztā secībā:

XREVRANGE mystream + - COUNT 10

Dati par vairākiem patērētājiem

Situācija: Patērētāji patērē jūsu datus daudz lēnāk nekā ražotāji.

Dažos gadījumos, ieskaitot attēlu apstrādi, padziļinātu mācīšanos un noskaņojumu analīzi, patērētāji var būt ļoti lēni, salīdzinot ar ražotājiem. Šādos gadījumos jūs pielāgojat datu saņemšanas ātrumu patērētajiem datiem, izskaužot patērētājus un sadalot katra patērētos datus.

Izmantojot Redis Streams, varat to izmantot patērētāju grupām. Ja grupā ietilpst vairāk nekā viens patērētājs, Redis Streams nodrošinās, ka katrs patērētājs saņem ekskluzīvu datu kopu.

XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMS mystream>

Protams, ir daudz vairāk, lai uzzinātu par to, kā darbojas patērētāju grupas. Redis Streams patērētāju grupas ir paredzētas datu sadalīšanai, atgūšanai no katastrofām un darījumu datu drošībai. Es to visu paskaidrošu savā nākamajā rakstā šeit.

Kā redzat, ir viegli sākt darbu ar Redis Streams. Vienkārši lejupielādējiet un instalējiet Redis 5.0 un ienirstiet Redis Streams apmācībā projekta vietnē.

Roshan Kumar ir vecākais produktu menedžerisRedis Labs. Viņam ir liela pieredze programmatūras izstrādē un tehnoloģiju mārketingā. Roshans ir strādājis Hewlett-Packard un daudzos veiksmīgos Silīcija ielejas jaunuzņēmumos, tostarp ZillionTV, Salorix, Alopa un ActiveVideo. Kā entuziasma pilns programmētājs viņš izstrādāja un izstrādāja tiešsaistes platformu mindzeal.com, kurā jaunajiem studentiem tika organizēti datorprogrammēšanas kursi. Roshans ir ieguvis bakalaura grādu datorzinātnēs un MBA Santa Clara universitātē.

Jauno tehnoloģiju forums nodrošina vietu, kur bezprecedenta dziļumā un plašumā izpētīt un pārrunāt topošās uzņēmuma tehnoloģijas. Izvēle ir subjektīva, balstoties uz mūsu izvēlētajām tehnoloģijām, kuras, mūsuprāt, ir svarīgas un interesē lasītājus. nepieņem mārketinga nodrošinājumu publicēšanai un patur tiesības rediģēt visu ieguldīto saturu. Nosūtiet visus jautājumus uz[email protected].

$config[zx-auto] not found$config[zx-overlay] not found