Programavimas

Kaip naudotis „Redis Streams“

Roshanas Kumaras yra „Redis Labs“ vyresnysis produktų vadovas.

„Redis“, atmintyje esanti kelių modelių duomenų bazė, yra populiari daugeliu atvejų. Tai apima turinio talpyklą, sesijų parduotuves, realaus laiko analizę, pranešimų tarpininkavimą ir duomenų srautą. Praėjusiais metais rašiau apie tai, kaip srauto apdorojimui realiuoju laiku naudoti „Redis Pub / Sub“, „Lists“ ir „Rūšiuoti rinkiniai“. Dabar, atėjus „Redis 5.0“, „Redis“ turi visiškai naują duomenų struktūrą, skirtą srautams valdyti.

Naudodami „Redis Streams“ duomenų struktūrą galite padaryti daug daugiau, nei buvo įmanoma naudojant „Pub / Sub“, „List“ ir „Sorted Sets“. Tarp daugybės privalumų „Redis Streams“ leidžia atlikti šiuos veiksmus:

  • Surinkite didelius duomenis, gaunamus dideliu greičiu (vienintelis trūkumas yra jūsų tinklo įvestis / išvestis);
  • Sukurti duomenų kanalą tarp daugelio gamintojų ir daugelio vartotojų;
  • Efektyviai valdykite savo duomenų naudojimą, net jei gamintojai ir vartotojai veikia ne tokiu pačiu greičiu;
  • Išsaugoti duomenis, kai jūsų vartotojai yra neprisijungę arba atjungti;
  • Asinchroniškai bendrauti tarp gamintojų ir vartotojų;
  • Sumažinkite savo vartotojų skaičių;
  • Įgyvendinti panašų į sandorius duomenų saugumą, kai vartotojai nesugeba vartoti duomenų; ir
  • Efektyviai naudokite pagrindinę atmintį.

Geriausia „Redis Stream“ dalis yra ta, kad ji įmontuota į „Redis“, todėl norint diegti ar valdyti „Redis Stream“ nereikia jokių papildomų veiksmų. Šiame straipsnyje apžvelgsiu pagrindinius „Redis Stream“ naudojimo pagrindus. Mes panagrinėsime, kaip galime pridėti duomenų prie srauto ir kaip galime juos perskaityti (visus vienu metu, asinchroniškai, kai jie gaunami ir pan.), Kad patenkintume skirtingus vartotojų naudojimo atvejus.

Dviejuose būsimuose straipsniuose aptarsiu, kaip veikia „Redis Streams“ vartotojų grupės, ir parodysiu veikiančią programą, naudojančią „Redis Streams“.

Supraskite duomenų srautą „Redis“ srautuose

„Redis Streams“ pateikia „tik pridėti“ duomenų struktūrą, panašią į žurnalus. Jame pateikiamos komandos, leidžiančios pridėti šaltinius prie srautų, vartoti srautus ir stebėti bei valdyti, kaip duomenys sunaudojami. „Stream“ duomenų struktūra yra lanksti, leidžianti keliais būdais susieti gamintojus ir vartotojus.

„Redis Labs“

1 paveiksle parodytas pagrindinis „Redis“ srautų naudojimas. Vienas gamintojas veikia kaip duomenų šaltinis, o jo vartotojas yra susirašinėjimo programa, kuri siunčia duomenis atitinkamiems gavėjams.

„Redis Labs“

2 paveiksle bendrą duomenų srautą naudoja daugiau nei vienas vartotojas. Naudodamiesi „Redis Streams“ vartotojai gali skaityti ir analizuoti duomenis savo ritmu.

Kitoje programoje, parodytoje 3 paveiksle, viskas tampa šiek tiek sudėtingesnė. Ši paslauga gauna duomenis iš kelių gamintojų ir visus juos saugo „Redis Streams“ duomenų struktūroje. Programoje yra keli vartotojai, skaitantys „Redis Streams“ duomenis, taip pat vartotojų grupė, palaikanti vartotojus, kurie negali veikti tokiu pačiu greičiu kaip gamintojai.

„Redis Labs“

Pridėkite duomenų prie srauto naudodami „Redis Streams“

3 paveiksle pavaizduota schema rodo tik vieną būdą, kaip pridėti duomenis prie „Redis Stream“. Nors vienas ar keli gamintojai gali pridėti duomenų prie duomenų struktūros, visi nauji duomenys visada pridedami prie srauto pabaigos.

Numatytasis duomenų pridėjimo būdas

Tai paprasčiausias būdas įtraukti duomenis į „Redis“ srautus:

XADD mystream * vardas Anna

XADD mystream * vardas Bertas

XADD mystream * vardas Cathy

Šioje komandoje XADD yra komanda „Redis“, „mystream“ yra srauto pavadinimas, Anna, Bert ir Cathy - kiekvienoje eilutėje pridėti vardai, o * operatorius liepia Redis automatiškai sugeneruoti kiekvienos eilutės identifikatorių. Dėl šios komandos gaunami trys „mystream“ įrašai:

1518951481323-0 vardas Cathy

1518951480723-0 vardas Bertas

1518951480106-0 vardas Ana

Kiekvieno įrašo duomenų pridėjimas su vartotojo valdomais ID

„Redis“ suteikia galimybę išsaugoti savo kiekvieno įrašo identifikatorių (žr. Toliau). Kai kuriais atvejais tai gali būti naudinga, tačiau paprasčiau pasikliauti automatiškai sugeneruotais ID.

XADD mystream 10000000 vardas Anna

XADD mystream 10000001 pavadinimas Bert

XADD mystream 10000002 vardas Cathy

Taip gaunami šie „mystream“ įrašai:

10000002-0 vardas Cathy

10000001-0 vardas Bertas

10000000-0 vardas Anna

Duomenų pridėjimas su maksimalia riba

Srautą galite apriboti maksimaliu įrašų skaičiumi:

XADD mystream MAXLEN 1000000 * vardas Anna

XADD mystream MAXLEN 1000000 * vardas Bert

XADD mystream MAXLEN 1000000 * vardas Cathy

Ši komanda pašalina senesnius įrašus, kai srautas pasiekia maždaug 1 000 000 ilgio.

Patarimas: „Redis Streams“ saugo duomenis radix medžio makrokomandose. Kiekviename makrokomandos mazge yra keli duomenų elementai (paprastai kelių dešimčių diapazone). Pridėjus apytikslę MAXLEN vertę, kaip parodyta žemiau, nereikės manipuliuoti makrokomandu kiekvienam įterpimui. Jei kelios dešimtys skaičių, pvz., Ar 1000000, ar 1000050, jums mažai kuo skiriasi, galite optimizuoti savo našumą iškviesdami komandą su apytiksliu simboliu (~).

XADD mystream MAXLEN ~ 1000000 * vardas Anna

XADD mystream MAXLEN ~ 1000000 * vardas Bert

XADD mystream MAXLEN ~ 1000000 * vardas Cathy

Naudokite duomenis iš srauto naudodami „Redis Streams“

„Redis Streams“ struktūra siūlo gausų komandų ir funkcijų rinkinį, kad jūsų duomenys būtų naudojami įvairiais būdais.

Skaitykite viską nuo srauto pradžios

Situacija: sraute jau yra duomenų, kuriuos reikia apdoroti, ir jūs norite viską apdoroti nuo pat pradžių.

Tam naudosite komandą XREAD, kuri leidžia perskaityti visus arba pirmuosius N įrašus nuo srauto pradžios. Kaip geriausią praktiką, visada verta perskaityti duomenis po puslapius. Norėdami perskaityti iki 100 įrašų nuo srauto pradžios, komanda yra tokia:

„XREAD COUNT“ 100 SRAUTŲ „mystream“ 0

Darant prielaidą, kad 1518951481323-0 yra paskutinis elemento, kurį gavote per ankstesnę komandą, ID, kitus 100 įrašų galite gauti paleisdami:

XREAD SKAIČIUOTI 100 SRAUTŲ „mystream“ 1518951481323-1

Duomenis naudoti asinchroniškai (per blokuojantį skambutį)

Situacija: vartotojas duomenis sunaudoja ir apdoroja greičiau nei greitis, kuriuo duomenys pridedami prie srauto.

Yra daugybė atvejų, kai vartotojas skaito greičiau, nei gamintojai prideda duomenis prie jūsų srauto. Tokiais atvejais norite, kad vartotojas palauktų ir jam būtų pranešta, kai gaunami nauji duomenys. BLOCK parinktis leidžia nurodyti, kiek laiko reikia laukti naujų duomenų: 

„XREAD BLOCK 60000 STREAMS“ „mystream“ 1518951123456-1

Čia XREAD grąžina visus duomenis po 1518951123456-1. Jei po to duomenų nėra, užklausa laukia N = 60 sekundžių, kol atsiras nauji duomenys, ir tada pasibaigs laikas. Jei norite be galo užblokuoti šią komandą, iškvieskite XREAD taip:

„XREAD BLOCK 0 STREAMS“ „mystream“ 1518951123456-1 

Pastaba: Šiame pavyzdyje taip pat galite nuskaityti duomenis po puslapius naudodami komandą XRANGE. 

Skaitykite tik naujus duomenis, kai jie gaunami

Situacija: jus domina apdoroti tik naują duomenų rinkinį, pradedant nuo dabartinio laiko.

Kai duomenis skaitote pakartotinai, visada verta pradėti iš naujo ten, kur baigėte. Pvz., Ankstesniame pavyzdyje atlikote blokavimo skambutį, norėdami perskaityti duomenis, didesnius nei 1518951123456-1. Tačiau pirmiausia galite nežinoti naujausio asmens tapatybės dokumento. Tokiais atvejais galite pradėti skaityti srautą su $ ženklu, kuris liepia komandai XREAD nuskaityti tik naujus duomenis. Kadangi šiame skambutyje BLOCK parinktis naudojama per 60 sekundžių, ji lauks, kol sraute bus šiek tiek duomenų.

XREAD BLOCK 60000 STREAMS mystream $

Tokiu atveju pradėsite skaityti naujus duomenis naudodami parinktį $. Tačiau neturėtumėte skambinti vėliau naudodami $ parinktį. Pvz., Jei 1518951123456-0 yra duomenų, gautų per ankstesnius skambučius, ID, kitas jūsų skambutis turėtų būti:

„XREAD BLOCK 60000 STREAMS“ „mystream“ 1518951123456-1

Kartokite srautą, kad galėtumėte perskaityti ankstesnius duomenis

Situacija: jūsų duomenų sraute jau yra pakankamai duomenų ir norite pateikti užklausą, kad galėtumėte analizuoti iki šiol surinktus duomenis.

Duomenis tarp dviejų įrašų galite perskaityti į priekį arba atgal naudodami atitinkamai XRANGE ir XREVRANGE. Šiame pavyzdyje komanda nuskaito duomenis tarp 1518951123450-0 ir 1518951123460-0:

„XRANGE mystream“ 1518951123450-0 1518951123460-0

XRANGE taip pat leidžia apriboti grąžintų prekių skaičių naudojant parinktį COUNT. Pavyzdžiui, ši užklausa pateikia pirmuosius 10 elementų tarp dviejų intervalų. Naudodami šią parinktį, galite pakartoti srautą, kaip tai darote naudodami komandą SCAN:

XRANGE mystream 1518951123450-0 1518951123460-0 COUNT 10

Kai nežinote apatinės ar viršutinės užklausos ribos, galite pakeisti apatinę ribą -, o viršutinę - +. Pvz., Ši užklausa grąžina pirmuosius 10 elementų iš jūsų srauto pradžios:

XRANGE mystream - + COUNT 10

XREVRANGE sintaksė yra panaši į XRANGE, išskyrus tai, kad jūs pakeisite apatinės ir viršutinės ribų tvarką. Pvz., Ši užklausa grąžina pirmuosius 10 elementų iš srauto pabaigos atvirkštine tvarka:

XREVRANGE mystream + - COUNT 10

Padalijimo duomenys tarp daugiau nei vieno vartotojo

Situacija: Vartotojai naudoja jūsų duomenis daug lėčiau nei gamintojai.

Tam tikrais atvejais, įskaitant vaizdo apdorojimą, gilų mokymąsi ir nuotaikų analizę, vartotojai gali būti labai lėti, palyginti su gamintojais. Tokiais atvejais duomenų priėmimo greitį ir suvartojamus duomenis suderinate, pašalindami savo vartotojus ir padalydami kiekvieno sunaudotus duomenis.

Norėdami tai pasiekti, naudodami „Redis Stream“ galite naudoti vartotojų grupes. Kai grupėje yra daugiau nei vienas vartotojas, „Redis Streams“ užtikrins, kad kiekvienas vartotojas gautų išskirtinį duomenų rinkinį.

„XREADGROUP GROUP“ mano grupės vartotojas1 SKAIČIUO 2 SRAUTUS „mystream“>

Žinoma, yra dar daug ką sužinoti apie tai, kaip veikia vartotojų grupės. „Redis Streams“ vartotojų grupės yra skirtos skaidyti duomenis, atsigauti po nelaimių ir užtikrinti operacijų duomenų saugumą. Visa tai paaiškinsiu savo kitame straipsnyje čia.

Kaip matote, lengva pradėti naudotis „Redis Streams“. Tiesiog atsisiųskite ir įdiekite „Redis 5.0“ ir pasinerkite į „Redis Streams“ pamoką projekto svetainėje.

Roshan Kumar yra vyresnysis produktų vadovas„Redis Labs“. Jis turi didelę programinės įrangos kūrimo ir technologijų rinkodaros patirtį. Roshanas dirbo „Hewlett-Packard“ ir daugelyje sėkmingų Silicio slėnio startuolių, įskaitant „ZillionTV“, „Salorix“, „Alopa“ ir „ActiveVideo“. Būdamas entuziastingas programuotojas, jis sukūrė ir sukūrė internetinę platformą „mindzeal.com“, kurioje rengiami kompiuterių programavimo kursai jauniems studentams. Roshan turi informatikos bakalauro laipsnį ir MBA Santa Clara universitete.

Naujųjų technologijų forumas suteikia galimybę tyrinėti ir aptarti besiformuojančios įmonės technologijas beprecedentiame gylyje. Atranka yra subjektyvi, atsižvelgiant į mūsų pasirinktas technologijas, kurios, mūsų manymu, yra svarbios ir labiausiai domina skaitytojus. nepriima rinkodaros užtikrinimo priemonės paskelbimui ir pasilieka teisę redaguoti visą pateiktą turinį. Visus klausimus siųskite adresu[email protected].