Kako koristiti Redis Streamove

Roshan Kumar viši je voditelj proizvoda u Redis Labs.

Redis, memorijska baza podataka s više modela, popularna je u mnogim slučajevima korištenja. To uključuje predmemoriranje sadržaja, pohranu sesija, analitiku u stvarnom vremenu, posredovanje poruka i strujanje podataka. Prošle sam godine napisao o tome kako koristiti Redis Pub / Sub, Popise i Sortirane skupove za obradu streama u stvarnom vremenu. Sada, dolaskom Redisa 5.0, Redis ima potpuno novu strukturu podataka dizajniranu za upravljanje streamovima.

Pomoću strukture podataka Redis Streams možete učiniti puno više od onoga što je bilo moguće s Pub / Sub, Lists i Sorted Sets. Među mnogim prednostima, Redis Streams omogućuje vam sljedeće:

  • Prikupite velike količine podataka koji stižu velikom brzinom (jedino usko grlo je vaš mrežni ulaz / izlaz);
  • Stvorite podatkovni kanal između mnogih proizvođača i mnogih potrošača;
  • Učinkovito upravljajte potrošnjom podataka čak i kada proizvođači i potrošači ne rade istom brzinom;
  • Stalno čuvajte podatke kada su vaši potrošači izvan mreže ili su isključeni;
  • Komunicirati između proizvođača i potrošača asinkrono;
  • Povećajte broj potrošača;
  • Primijeniti sigurnost podataka sličnih transakcijama kada potrošači ne uspiju usred konzumiranja podataka; i
  • Učinkovito koristite glavnu memoriju.

Najbolji dio Redis Streamsa je što je ugrađen u Redis, tako da nisu potrebni dodatni koraci za postavljanje ili upravljanje Redis Streamsom. U ovom članku provest ću vas kroz osnove korištenja Redis Streamova. Pogledat ćemo kako možemo dodati podatke u tok i kako te podatke možemo čitati (odjednom, asinkrono, čim stignu, itd.) Kako bismo zadovoljili različite slučajeve upotrebe potrošača.

U dva sljedeća članka ovdje ću raspraviti o tome kako djeluju potrošačke grupe Redis Streams-a i pokazati radnu aplikaciju koja koristi Redis Streams.

Razumijevanje protoka podataka u Redis Streams

Redis Streams pruža strukturu podataka „samo dodavanje“ koja je slična dnevnicima. Nudi naredbe koje vam omogućuju dodavanje izvora u streamove, trošenje tokova te nadgledanje i upravljanje potrošnjom podataka. Struktura podataka Streams fleksibilna je, omogućujući vam povezivanje proizvođača i potrošača na nekoliko načina.

Redis laboratoriji

Slika 1 prikazuje osnovnu uporabu Redis Streamova. Jedan proizvođač djeluje kao izvor podataka, a njegov je potrošač aplikacija za slanje poruka koja podatke šalje relevantnim primateljima.

Redis laboratoriji

Na slici 2, zajednički tok podataka troši više od jednog potrošača. Uz Redis Streams, potrošači mogu čitati i analizirati podatke vlastitim tempom.

U sljedećoj aplikaciji, prikazanoj na slici 3, stvari postaju malo složenije. Ova usluga prima podatke od više proizvođača i sve ih pohranjuje u strukturu podataka Redis Streams. Aplikacija ima više potrošača koji čitaju podatke iz Redis Streamsa, kao i potrošačku skupinu koja podržava potrošače koji ne mogu raditi istom brzinom kao i proizvođači.

Redis laboratoriji

Dodajte podatke u stream s Redis Streams

Dijagram na slici 3 prikazuje samo jedan način za dodavanje podataka u Redis Stream. Iako jedan ili više proizvođača mogu dodati podatke u strukturu podataka, svi se novi podaci uvijek dodaju na kraj toka.

Zadana metoda za dodavanje podataka

Ovo je najjednostavniji način za dodavanje podataka u Redis Streamove:

XADD mystream * ime Anna

XADD mystream * ime Bert

XADD mystream * ime Cathy

U ovoj naredbi XADD je naredba Redis, mystream je ime toka, Anna, Bert i Cathy imena su dodana u svaki redak, a operator * kaže Redisu da automatski generira identifikator za svaki redak. Ova naredba rezultira s tri mystream unosa:

1518951481323-0 ime Cathy

1518951480723-0 ime Bert

1518951480106-0 ime Anna

Dodavanje podataka s ID-ovima kojima upravlja korisnik za svaki unos

Redis vam daje mogućnost održavanja vlastitog identifikatora za svaki unos (vidi dolje). Iako ovo može biti korisno u nekim slučajevima, obično je jednostavnije osloniti se na automatski generirane ID-ove.

XADD mystream 10000000 ime Anna

XADD mystream 10000001 ime Bert

XADD mystream 10000002 ime Cathy

To rezultira sljedećim mystream unosima:

10000002-0 ime Cathy

10000001-0 ime Bert

10000000-0 ime Anna

Dodavanje podataka s maksimalnim ograničenjem

Možete ograničiti svoj stream s maksimalnim brojem unosa:

XADD mystream MAXLEN 1000000 * ime Anna

XADD mystream MAXLEN 1000000 * ime Bert

XADD mystream MAXLEN 1000000 * ime Cathy

Ova naredba izbacuje starije unose kada tok dosegne duljinu od oko 1.000.000.

Savjet: Redis Streams pohranjuje podatke u makro čvorove radix stabla. Svaki čvor makronaredbi ima nekoliko podataka (obično u rasponu od nekoliko desetaka). Dodavanjem približne vrijednosti MAXLEN, kao što je prikazano u nastavku, izbjegava se manipulacija čvorom makronaredbi za svako umetanje. Ako vam nekoliko desetaka brojeva - npr. 1000000 ili 1000050 - nema velike razlike, možete optimizirati izvedbu pozivom naredbe s približnim znakom (~).

XADD mystream MAXLEN ~ 1000000 * ime Anna

XADD mystream MAXLEN ~ 1000000 * ime Bert

XADD mystream MAXLEN ~ 1000000 * ime Cathy

Konzumirajte podatke iz streama s Redis Streams

Struktura Redis Streams nudi bogat skup naredbi i značajki za trošenje vaših podataka na razne načine.

Pročitajte sve od početka streama

Situacija: Stream već ima podatke koje trebate obraditi, a sve želite obraditi od početka.

Naredba koju ćete za to upotrijebiti je XREAD, koja vam omogućuje čitanje svih ili prvih N unosa s početka toka. Kao najbolja praksa, uvijek je dobra ideja čitati podatke stranicu po stranicu. Da biste pročitali do 100 unosa s početka streama, naredba je:

XREAD COUNT 100 STREAMES mystream 0

Pod pretpostavkom da je 1518951481323-0 posljednji ID stavke koju ste primili u prethodnoj naredbi, možete dohvatiti sljedećih 100 unosa pokretanjem:

XREAD COUNT 100 STREAMES mystream 1518951481323-1

Konzumirajte podatke asinkrono (putem poziva za blokiranje)

Situacija: Vaš potrošač troši i obrađuje podatke brže od brzine dodavanja podataka u stream.

Postoje mnogi slučajevi upotrebe kada potrošač čita brže nego što proizvođači dodaju podatke u vaš stream. U tim scenarijima želite da potrošač pričeka i bude obaviješten kad stignu novi podaci. Opcija BLOK omogućuje vam određivanje vremena čekanja na nove podatke: 

XREAD BLOCK 60000 STREAMING mystream 1518951123456-1

Ovdje XREAD vraća sve podatke nakon 1518951123456-1. Ako nakon toga nema podataka, upit će pričekati N = 60 sekundi dok ne stignu novi podaci, a zatim istekne. Ako ovu naredbu želite beskonačno blokirati, nazovite XREAD kako slijedi:

XREAD BLOCK 0 STREAMING mystream 1518951123456-1 

Napomena : U ovom primjeru podatke možete dobiti i stranicu po stranicu pomoću naredbe XRANGE. 

Čitajte samo nove podatke čim stignu

Situacija: Zanima vas obrada samo novog skupa podataka počevši od trenutnog trenutka u vremenu.

Kada podatke čitate više puta, uvijek je dobro započeti s tamo gdje ste stali. Na primjer, u prethodnom primjeru uputili ste blokirajući poziv za čitanje podataka većih od 1518951123456-1. Međutim, za početak možda ne znate najnoviji ID. U takvim slučajevima možete početi čitati tok sa znakom $, koji naredbi XREAD govori da će dohvatiti samo nove podatke. Kako ovaj poziv koristi BLOCK opciju sa 60 sekundi, pričekat će dok u streamu nema podataka.

XREAD BLOCK 60000 STREAMING mystream $

U tom ćete slučaju nove podatke započeti s opcijom $. Međutim, ne biste trebali upućivati ​​naknadne pozive s opcijom $. Na primjer, ako je 1518951123456-0 ID podataka dohvaćenih u prethodnim pozivima, vaš sljedeći poziv trebao bi biti:

XREAD BLOCK 60000 STREAMING mystream 1518951123456-1

Ponovite tok za čitanje prošlih podataka

Situacija: Vaš tok podataka već ima dovoljno podataka i želite ga upitati kako biste analizirali do sada prikupljene podatke.

Možete čitati podatke između dva unosa u smjeru naprijed ili natrag pomoću XRANGE odnosno XREVRANGE. U ovom primjeru naredba čita podatke između 1518951123450-0 i 1518951123460-0:

XRANGE mystream 1518951123450-0 1518951123460-0

XRANGE također vam omogućuje da ograničite broj vraćenih predmeta uz pomoć opcije COUNT. Na primjer, sljedeći upit vraća prvih 10 stavki između dva intervala. Pomoću ove opcije možete ponoviti tok poput naredbe SCAN:

XRANGE mystream 1518951123450-0 1518951123460-0 COUNT 10

Kada ne znate donju ili gornju granicu svog upita, možete zamijeniti donju i -, a gornju -. Na primjer, sljedeći upit vraća prvih 10 stavki s početka vašeg streama:

XRANGE mystream - + COUNT 10

Sintaksa za XREVRANGE slična je XRANGE, osim što obrćete redoslijed donje i gornje granice. Na primjer, sljedeći upit vraća prvih 10 stavki s kraja vašeg streama obrnutim redoslijedom:

XREVRANGE mystream + - TAČKA 10

Podaci o particiji između više potrošača

Situacija: Potrošači troše vaše podatke puno sporije nego što ih proizvođači proizvode.

U određenim slučajevima, uključujući obradu slika, dubinsko učenje i analizu osjećaja, potrošači mogu biti vrlo spori u usporedbi s proizvođačima. U tim slučajevima brzinu dolaska podataka uskladite s podacima koji se konzumiraju tako što ćete obogatiti svoje potrošače i podijeliti podatke koje potroši svaki od njih.

S Redis Streamsom možete koristiti grupe potrošača da biste to postigli. Kada je više skupina dio grupe, Redis Streams osigurat će da svaki potrošač dobije ekskluzivni skup podataka.

XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMES mystream>

Naravno, postoji još mnogo toga za naučiti o tome kako rade skupine potrošača. Potrošačke grupe Redis Streams dizajnirane su za particioniranje podataka, oporavak od katastrofa i isporuku sigurnosti podataka o transakcijama. Sve ću to objasniti u sljedećem članku ovdje.

Kao što vidite, s Redis Streamsom lako je započeti. Samo preuzmite i instalirajte Redis 5.0 i zaronite u vodič za Redis Streams na web mjestu projekta.

Roshan Kumar viši je voditelj proizvoda u  Redis Labs . Ima veliko iskustvo u razvoju softvera i tehnološkom marketingu. Roshan je radio u Hewlett-Packardu i mnogim uspješnim startup tvrtkama u Silicijskoj dolini, uključujući ZillionTV, Salorix, Alopa i ActiveVideo. Kao entuzijastični programer, dizajnirao je i razvio mindzeal.com, internetsku platformu koja organizira tečajeve računalnog programiranja za mlade studente. Roshan je diplomirao računalne znanosti i stekao MBA na Sveučilištu Santa Clara.

-

New Tech Forum pruža mjesto za istraživanje i raspravu o novonastaloj tehnologiji poduzeća u neviđenoj dubini i širini. Izbor je subjektivan, zasnovan na našem odabiru tehnologija za koje vjerujemo da su važne i da najviše zanimaju čitatelje. ne prihvaća marketinške kolaterale za objavljivanje i zadržava pravo uređivanja cjelokupnog sadržaja. Pošaljite sve upite na  [email protected] .