Programiranje

Kako uporabljati Redis Streams

Roshan Kumar je višja produktna vodja v laboratorijih Redis.

Redis, multi-modelna baza podatkov v pomnilniku, je priljubljena za številne primere uporabe. Sem spadajo predpomnjenje vsebine, shrambe sej, sprotna analitika, posredovanje sporočil in pretakanje podatkov. Lani sem pisal o tem, kako uporabljati Redis Pub / Sub, Lists in Sorted Sets za sprotno obdelavo tokov. Zdaj, ko je Redis 5.0 prišel, ima Redis povsem novo podatkovno strukturo, namenjeno upravljanju tokov.

S podatkovno strukturo Redis Streams lahko naredite veliko več, kot je bilo mogoče z Pub / Sub, Lists in Sorted Sets. Med številnimi prednostmi vam Redis Streams omogoča naslednje:

  • Zbirajte velike količine podatkov, ki prispejo z visoko hitrostjo (edino ozko grlo je vaš I / O omrežje);
  • Ustvarite podatkovni kanal med številnimi proizvajalci in številnimi potrošniki;
  • Učinkovito upravljanje porabe podatkov, tudi če proizvajalci in potrošniki ne delujejo enako hitro;
  • Vztrajajte v podatkih, ko so vaši potrošniki brez povezave ali brez povezave;
  • Komunicirati med proizvajalci in potrošniki asinhrono;
  • Prilagodite svoje število potrošnikov;
  • Uvesti varnost podatkov, podobnih transakcijam, kadar potrošniki ne uspejo med porabo podatkov; in
  • Učinkovito uporabljajte svoj glavni spomin.

Najboljši del Redis Streams je, da je vgrajen v Redis, zato za uvajanje ali upravljanje Redis Streams ni potrebnih dodatnih korakov. V tem članku vam bom predstavil osnove uporabe Redis Streams. Preučili bomo, kako lahko toku dodamo podatke in kako jih lahko beremo (vse hkrati, asinhrono, ko prispejo itd.), Da zadostimo različnim uporabniškim primerom.

V naslednjih dveh člankih bom razpravljal o tem, kako delujejo potrošniške skupine Redis Streams, in prikazal delujočo aplikacijo, ki uporablja Redis Streams.

Razumevanje pretoka podatkov v Redis Streams

Redis Streams ponuja podatkovno strukturo »samo dodaj«, ki je podobna dnevnikom. Ponuja ukaze, ki vam omogočajo dodajanje virov v tokove, porabo tokov ter spremljanje in upravljanje porabe podatkov. Struktura podatkov Streams je prilagodljiva in vam omogoča povezovanje proizvajalcev in potrošnikov na več načinov.

Redis Labs

Slika 1 prikazuje osnovno uporabo Redis Streams. En sam proizvajalec deluje kot vir podatkov, njegov potrošnik pa je aplikacija za sporočanje, ki podatke pošilja ustreznim prejemnikom.

Redis Labs

Na sliki 2 skupni podatkovni tok porabi več kot en potrošnik. Z Redis Streams lahko potrošniki preberejo in analizirajo podatke v svojem ritmu.

V naslednji aplikaciji, prikazani na sliki 3, so stvari nekoliko bolj zapletene. Ta storitev prejema podatke več proizvajalcev in jih vse shrani v podatkovno strukturo Redis Streams. V aplikaciji je več potrošnikov, ki berejo podatke iz Redis Streams, pa tudi skupina potrošnikov, ki podpira potrošnike, ki ne morejo delovati enako hitro kot proizvajalci.

Redis Labs

Dodajte podatke v tok z Redis Streams

Diagram na sliki 3 prikazuje samo en način dodajanja podatkov v tok Redis. Čeprav lahko eden ali več proizvajalcev doda podatke v strukturo podatkov, so vsi novi podatki vedno dodani na konec toka.

Privzeta metoda za dodajanje podatkov

To je najpreprostejši način za dodajanje podatkov v Redis Streams:

XADD mystream * ime Anna

XADD mystream * ime Bert

XADD mystream * ime Cathy

V tem ukazu je XADD ukaz Redis, mystream je ime toka, Anna, Bert in Cathy so imena, dodana v vsako vrstico, operater * pa Redisu naroči, naj samodejno ustvari identifikator za vsako vrstico. Ta ukaz povzroči tri vnose mystream:

1518951481323-0 ime Cathy

1518951480723-0 ime Bert

1518951480106-0 ime Anna

Dodajanje podatkov z ID-ji, ki jih upravljajo uporabniki, za vsak vnos

Redis vam omogoča, da obdržite svoj identifikator za vsak vnos (glejte spodaj). Čeprav je to v nekaterih primerih koristno, je običajno preprosteje zanašati se na samodejno ustvarjene ID-je.

XADD mystream 10000000 ime Anna

XADD mystream 10000001 ime Bert

XADD mystream 10000002 ime Cathy

Rezultat tega so naslednji vnosi v mojem toku:

10000002-0 ime Cathy

10000001-0 ime Bert

10000000-0 ime Anna

Dodajanje podatkov z največjo mejo

V svojem toku lahko omejite največje število vnosov:

XADD mystream MAXLEN 1000000 * ime Anna

XADD mystream MAXLEN 1000000 * ime Bert

XADD mystream MAXLEN 1000000 * ime Cathy

Ta ukaz izseli starejše vnose, ko tok doseže približno 1.000.000.

Namig: Redis Streams podatke shrani v makro vozlišča drevesa radix. Vsako vozlišče makra ima nekaj podatkovnih postavk (običajno v obsegu nekaj deset). Če dodate približno vrednost MAXLEN, kot je prikazano spodaj, se izognete manipulaciji z vozliščem makra za vsako vstavitev. Če vam nekaj deset števil - npr. 1000000 ali 1000050 - malo pomeni, lahko optimizirate svojo uspešnost tako, da pokličete ukaz z približnim znakom (~).

XADD mystream MAXLEN ~ 1000000 * ime Anna

XADD mystream MAXLEN ~ 1000000 * ime Bert

XADD mystream MAXLEN ~ 1000000 * ime Cathy

Porabite podatke iz toka z Redis Streams

Struktura Redis Streams ponuja bogat nabor ukazov in funkcij za porabo vaših podatkov na različne načine.

Preberite vse od začetka toka

Situacija: Tok že vsebuje podatke, ki jih morate obdelati, in vse to želite obdelati od začetka.

Ukaz, ki ga boste uporabili za to, je XREAD, ki vam omogoča branje vseh ali prvih N vnosov z začetka toka. Kot najboljša praksa je vedno dobro brati podatke stran za stranjo. Če želite prebrati do 100 vnosov z začetka toka, je ukaz:

XREAD COUNT 100 STREAM mystream 0

Ob predpostavki, da je 1518951481323-0 zadnji ID elementa, ki ste ga prejeli v prejšnjem ukazu, lahko naslednjih 100 vnosov pridobite tako, da zaženete:

XREAD COUNT 100 STREAM mystream 1518951481323-1

Podatke porabite asinhrono (prek blokirnega klica)

Situacija: Potrošnik porabi in obdela podatke hitreje od hitrosti dodajanja podatkov v tok.

Veliko je primerov uporabe, ko potrošnik bere hitreje, kot da proizvajalci dodajo podatke v vaš tok. V teh primerih želite, da potrošnik počaka in dobi obvestilo, ko prispejo novi podatki. Z možnostjo BLOCK lahko določite čas čakanja na nove podatke: 

XREAD BLOCK 60000 STREAM mystream 1518951123456-1

Tu XREAD vrne vse podatke po 1518951123456-1. Če po tem ni podatkov, bo poizvedba počakala N = 60 sekund, dokler ne prispejo novi podatki, nato pa potekel čas. Če želite ta ukaz neskončno blokirati, pokličite XREAD, kot sledi:

XREAD BLOCK 0 STREAMOV mystream 1518951123456-1 

Opomba: V tem primeru lahko podatke po straneh pridobite tudi z ukazom XRANGE. 

Preberite samo nove podatke, ko prispejo

Situacija: Zanima vas obdelava samo novega nabora podatkov, začenši s trenutnim trenutkom.

Ko večkrat berete podatke, je vedno dobro, da znova zaženete tam, kjer ste končali. Na primer, v prejšnjem primeru ste izvedli blokirni klic za branje podatkov, večjih od 1518951123456-1. Za začetek morda ne poznate najnovejšega osebnega dokumenta. V takih primerih lahko začnete brati tok z znakom $, ki ukazu XREAD sporoča, naj pridobi samo nove podatke. Ker ta klic uporablja možnost BLOKIRANJA s 60 sekundami, bo počakal, dokler v toku ni nekaj podatkov.

XREAD BLOCK 60000 STREAM mystream $

V tem primeru boste začeli brati nove podatke z možnostjo $. Vendar ne smete pozneje klicati z možnostjo $. Če je na primer 1518951123456-0 ID podatkov, pridobljenih v prejšnjih klicih, mora biti vaš naslednji klic:

XREAD BLOCK 60000 STREAMI mystream 1518951123456-1

Ponovite tok za branje preteklih podatkov

Situacija: Vaš podatkovni tok ima že dovolj podatkov in ga želite povprašati za analizo do zdaj zbranih podatkov.

Podatke med dvema vnosoma lahko berete v smeri naprej ali nazaj s pomočjo XRANGE oziroma XREVRANGE. V tem primeru ukaz bere podatke med 1518951123450-0 in 1518951123460-0:

XRANGE mystream 1518951123450-0 1518951123460-0

XRANGE omogoča tudi omejitev števila vrnjenih elementov s pomočjo možnosti COUNT. Naslednja poizvedba na primer vrne prvih 10 elementov med obema intervaloma. S to možnostjo lahko ponavljate tok, kot to počnete z ukazom SCAN:

XRANGE mystream 1518951123450-0 1518951123460-0 ŠTEVILO 10

Če ne poznate spodnje ali zgornje meje poizvedbe, lahko spodnjo mejo zamenjate z - in zgornjo mejo z +. Naslednja poizvedba na primer vrne prvih 10 elementov z začetka vašega toka:

XRANGE mystream - + ŠTEVILO 10

Sintaksa za XREVRANGE je podobna XRANGE, le da spremenite vrstni red spodnje in zgornje meje. Naslednja poizvedba na primer vrne prvih 10 elementov s konca vašega toka v obratnem vrstnem redu:

XREVRANGE mystream + - ŠTEVILO 10

Podatki o razdelitvi med več kot enim potrošnikom

Situacija: Potrošniki vaše podatke porabijo veliko počasneje, kot jih proizvajajo proizvajalci.

V nekaterih primerih, vključno z obdelavo slik, poglobljenim učenjem in analizo sentimenta, so potrošniki v primerjavi s proizvajalci lahko zelo počasni. V teh primerih hitrost podatkov, ki jih prispejo, prilagodite tako, da porabite podatke, tako da razveselite svoje potrošnike in razdelite podatke, ki jih porabi vsak.

Z Redis Streams lahko za to uporabite skupine potrošnikov. Če je v skupini več potrošnikov, bo Redis Streams zagotovil, da bo vsak potrošnik prejel ekskluziven nabor podatkov.

XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMES mystream>

Seveda je še veliko več o tem, kako delujejo potrošniške skupine. Skupine potrošnikov Redis Streams so namenjene razdelitvi podatkov, okrevanju po katastrofah in zagotavljanju varnosti podatkov o transakcijah. Vse to bom razložil v naslednjem članku tukaj.

Kot lahko vidite, je z Redis Streamsom enostavno začeti. Prenesite in namestite Redis 5.0 in se potopite v vadnico Redis Streams na spletni strani projekta.

Roshan Kumar je višja vodja izdelkov priRedis Labs. Ima bogate izkušnje na področju razvoja programske opreme in trženja tehnologije. Roshan je delal v Hewlett-Packardu in številnih uspešnih zagonskih podjetjih v Silicijevi dolini, vključno z ZillionTV, Salorix, Alopa in ActiveVideo. Kot navdušen programer je zasnoval in razvil mindzeal.com, spletno platformo, ki gosti tečaje računalniškega programiranja za mlade študente. Roshan je diplomiral iz računalništva in MBA na univerzi Santa Clara.

Forum New Tech ponuja prizorišče za raziskovanje in razpravo o nastajajoči podjetniški tehnologiji v globini in širini brez primere. Izbor je subjektiven in temelji na našem izboru tehnologij, za katere menimo, da so pomembne in najbolj zanimajo bralce. ne sprejema tržnih zavarovanj za objavo in si pridržuje pravico do urejanja celotne prispevane vsebine. Vsa vprašanja pošljite na[email protected].

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