Programovanie

Ako používať streamy Redis

Roshan Kumar je senior produktový manažér v Redis Labs.

Redis, multimodálna databáza v pamäti, je obľúbená pre mnoho prípadov použitia. Patria sem medzipamäť obsahu, obchody s reláciami, analýzy v reálnom čase, sprostredkovanie správ a streamovanie údajov. Minulý rok som písal o tom, ako používať Redis Pub / Sub, zoznamy a zoradené sady na spracovanie toku v reálnom čase. Teraz, s príchodom Redis 5.0, má Redis úplne novú dátovú štruktúru určenú na správu streamov.

S dátovou štruktúrou Redis Streams môžete urobiť oveľa viac, ako bolo možné pomocou pub / sub, zoznamov a zoradených množín. Medzi mnohými výhodami vám Redis Streams umožňuje:

  • Zhromažďujte veľké objemy dát prichádzajúcich vysokou rýchlosťou (jediným prekážkou je váš I / O siete);
  • Vytvorte dátový kanál medzi mnohými producentmi a mnohými spotrebiteľmi;
  • Efektívne spravujte svoju spotrebu dát, aj keď producenti a spotrebitelia nepracujú rovnakou rýchlosťou;
  • Zachovať údaje, keď sú vaši zákazníci offline alebo odpojení;
  • Asynchrónne komunikovať medzi výrobcami a spotrebiteľmi;
  • Zvýšte svoj počet spotrebiteľov;
  • Implementovať bezpečnosť dát podobných transakciám, keď spotrebitelia zlyhajú uprostred konzumácie dát; a
  • Efektívne využívajte svoju hlavnú pamäť.

Najlepšie na Redis Streams je, že je zabudovaný do Redis, takže na nasadenie alebo správu Redis Streamov nie sú potrebné žiadne ďalšie kroky. V tomto článku vás prevediem základmi používania streamov Redis. Pozrime sa na to, ako môžeme do streamu pridať údaje, a ako ich môžeme prečítať (všetky naraz, asynchrónne, pri ich príchode atď.), Aby sme uspokojili rôzne prípady použitia spotrebiteľom.

V dvoch budúcich článkoch tu rozoberiem, ako fungujú skupiny spotrebiteľov Redis Streams, a ukážem funkčnú aplikáciu, ktorá využíva Redis Streams.

Pochopte tok údajov v streamoch Redis

Redis Streams poskytuje dátovú štruktúru „iba na pripojenie“, ktorá sa javí podobná protokolom. Ponúka príkazy, ktoré vám umožňujú pridávať zdroje do streamov, konzumovať ich a monitorovať a spravovať spôsob spotreby dát. Dátová štruktúra streamov je flexibilná, čo vám umožňuje prepojiť výrobcov a spotrebiteľov niekoľkými spôsobmi.

Redis Labs

Obrázok 1 demonštruje základné použitie streamov Redis. Jediný výrobca slúži ako zdroj údajov a jeho spotrebiteľom je aplikácia na odosielanie správ, ktorá odosiela údaje príslušným príjemcom.

Redis Labs

Na obrázku 2 bežný dátový tok spotrebuje viac ako jeden spotrebiteľ. Vďaka Redis Streams môžu zákazníci čítať a analyzovať údaje vlastným tempom.

V nasledujúcej aplikácii znázornenej na obrázku 3 sa veci trochu skomplikujú. Táto služba prijíma údaje od viacerých výrobcov a všetky ich ukladá do dátovej štruktúry Redis Streams. Aplikácia má viacerých spotrebiteľov čítajúcich údaje z Redis Streams, ako aj skupinu spotrebiteľov, ktorá podporuje spotrebiteľov, ktorí nemôžu pracovať rovnakou rýchlosťou ako producenti.

Redis Labs

Pridajte dáta do streamu pomocou streamov Redis

Diagram na obrázku 3 zobrazuje iba jeden spôsob pridania údajov do toku Redis Stream. Aj keď jeden alebo viacerí producenti môžu pridať údaje do dátovej štruktúry, akékoľvek nové údaje sa vždy pripoja na koniec toku.

Predvolená metóda pridávania údajov

Toto je najjednoduchší spôsob pridávania údajov do streamov Redis:

XADD mystream * meno Anna

XADD mystream * meno Bert

XADD mystream * meno Cathy

V tomto príkaze je XADD príkaz Redis, mystream je názov streamu, Anna, Bert a Cathy sú mená pridané do každého riadku a operátor * povie Redis, aby automaticky vygeneroval identifikátor pre každý riadok. Výsledkom tohto príkazu sú tri položky mystream:

1518951481323-0 meno Cathy

1518951480723-0 meno Bert

1518951480106-0 meno Anna

Pridávanie údajov s ID spravovanými používateľmi pre každú položku

Redis vám dáva možnosť uchovať si pre každú položku svoj vlastný identifikátor (pozri nižšie). Aj keď to môže byť v niektorých prípadoch užitočné, spoliehať sa na automaticky generované ID je zvyčajne jednoduchšie.

XADD mystream 10000000 meno Anna

XADD mystream 10000001 meno Bert

XADD mystream 10000002 názov Cathy

Výsledkom sú nasledujúce položky mystream:

10000002-0 meno Cathy

10000001-0 meno Bert

10000000-0 meno Anna

Pridávanie údajov s maximálnym limitom

Stream môžete obmedziť maximálnym počtom záznamov:

XADD mystream MAXLEN 10 000 000 * meno Anna

XADD mystream MAXLEN 10 000 000 * meno Bert

XADD mystream MAXLEN 10 000 000 * meno Cathy

Tento príkaz vypudí staršie záznamy, keď prúd dosiahne dĺžku okolo 1 000 000.

Tip: Redis Streams ukladá údaje do makrododov stromu radix. Každý uzol makra má niekoľko dátových položiek (zvyčajne v rozmedzí niekoľkých desiatok). Pridaním približnej hodnoty MAXLEN, ako je uvedené nižšie, sa vyhnete nutnosti manipulácie s uzlom makra pre každé vloženie. Ak pre vás niekoľko desiatok čísel - napr. 10 000 000 alebo 10 00050 - znamená malý rozdiel, môžete svoj výkon optimalizovať volaním príkazu s aproximačným znakom (~).

XADD mystream MAXLEN ~ 10 000 000 * meno Anna

XADD mystream MAXLEN ~ 10 000 000 * meno Bert

XADD mystream MAXLEN ~ 10 000 000 * meno Cathy

Využívajte dáta zo streamu pomocou streamov Redis

Štruktúra streamov Redis Streams ponúka bohatú sadu príkazov a funkcií, pomocou ktorých môžete svoje dáta využívať rôznymi spôsobmi.

Prečítajte si všetko od začiatku streamu

Situácia: Stream už obsahuje údaje, ktoré potrebujete spracovať, a chcete ich spracovať všetko od začiatku.

Príkaz, ktorý na to použijete, je XREAD, ktorý vám umožní prečítať všetky alebo prvé N záznamy od začiatku streamu. Ako osvedčený postup je vždy dobré čítať údaje po stránkach. Ak chcete prečítať až 100 záznamov od začiatku streamu, je to príkaz:

XREAD COUNT 100 STREAMS mystream 0

Za predpokladu, že 1518951481323-0 je posledné ID položky, ktorú ste dostali v predchádzajúcom príkaze, môžete získať ďalších 100 položiek spustením:

XREAD COUNT 100 STREAMS mystream 1518951481323-1

Spotrebovať dáta asynchrónne (prostredníctvom blokujúceho hovoru)

Situácia: Váš spotrebiteľ spotrebuje a spracuje dáta rýchlejšie, ako je rýchlosť pridávania údajov do streamu.

Existuje veľa prípadov použitia, keď spotrebiteľ číta rýchlejšie, ako producenti pridajú údaje do vášho streamu. V týchto scenároch chcete, aby spotrebiteľ čakal a dostal upozornenie, keď prídu nové údaje. Možnosť BLOKOVAŤ vám umožňuje určiť dobu čakania na nové údaje: 

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Tu XREAD vráti všetky údaje po 1518951123456-1. Ak potom nebudú k dispozícii žiadne údaje, dopyt počká N = 60 sekúnd, kým dorazia nové údaje, a potom vyprší časový limit. Ak chcete tento príkaz nekonečne blokovať, zavolajte XREAD nasledovne:

XREAD BLOCK 0 STREAMS mystream 1518951123456-1 

Poznámka: V tomto príklade môžete tiež načítať údaje po stránkach pomocou príkazu XRANGE. 

Po príchode čítajte iba nové údaje

Situácia: Zaujíma vás, či chcete spracovať iba nový súbor údajov, ktorý začína od aktuálneho času.

Ak čítate údaje opakovane, je vždy dobré začať od miesta, kde ste prestali. Napríklad v predchádzajúcom príklade ste uskutočnili blokujúce volanie na čítanie údajov väčších ako 1518951123456-1. Avšak na začiatok možno nebudete poznať najnovšie ID. V takýchto prípadoch môžete začať čítať stream so znakom $, ktorý povie príkazu XREAD, aby načítal iba nové údaje. Pretože tento hovor využíva možnosť BLOKOVAŤ so 60 sekundami, bude počkať, kým v streame nebudú nejaké údaje.

XREAD BLOCK 60000 STREAMS mystream $

V takom prípade začnete čítať nové údaje pomocou možnosti $. Nasledujúce hovory by ste však nemali uskutočňovať s možnosťou $. Napríklad, ak 1518951123456-0 je ID údajov získaných z predchádzajúcich hovorov, váš ďalší hovor by mal byť:

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Iteráciou streamu načítate minulé údaje

Situácia: Váš dátový tok už má dostatok údajov a chcete ho vyhľadať, aby ste analyzovali doteraz zhromaždené údaje.

Dáta medzi dvoma záznamami ste mohli načítať buď vpred alebo vzad pomocou funkcií XRANGE a XREVRANGE. V tomto príklade príkaz načíta údaje medzi 1518951123450-0 a 1518951123460-0:

XRANGE mystream 1518951123450-0 1518951123460-0

XRANGE tiež umožňuje obmedziť počet vrátených položiek pomocou možnosti POČET. Napríklad nasledujúci dotaz vráti prvých 10 položiek medzi dvoma intervalmi. Pomocou tejto možnosti môžete iterovať prúdom, ako to robíte pomocou príkazu SCAN:

XRANGE mystream 1518951123450-0 1518951123460-0 POČET 10

Ak nepoznáte dolnú alebo hornú hranicu dopytu, môžete nahradiť dolnú hranicu znakom - a hornú hranicu znakom +. Napríklad nasledujúci dotaz vráti prvých 10 položiek od začiatku vášho streamu:

XRANGE mystream - + POČET 10

Syntax pre XREVRANGE je podobná ako pre XRANGE, ibaže obraciate poradie dolného a horného ohraničenia. Napríklad nasledujúci dotaz vráti prvých 10 položiek z konca vášho streamu v opačnom poradí:

XREVRANGE mystream + - POČET 10

Rozdelenie údajov medzi viac ako jedného spotrebiteľa

Situácia: Spotrebitelia spotrebúvajú vaše údaje oveľa pomalšie, ako ich produkujú producenti.

V určitých prípadoch, vrátane spracovania obrazu, hlbokého učenia a analýzy sentimentu, môžu byť spotrebitelia v porovnaní s producentmi veľmi pomalí. V týchto prípadoch prispôsobíte rýchlosť prichádzajúcich údajov údajom, ktoré sa spotrebúvajú, rozdeľovaním údajov o vašich zákazníkoch a rozdelením údajov spotrebovaných každým z nich.

S Redis Streams môžete na tento účel použiť skupiny spotrebiteľov. Ak je súčasťou skupiny viac ako jeden spotrebiteľ, Redis Streams zabezpečí, aby každý spotrebiteľ dostal exkluzívnu množinu údajov.

SKUPINA XREADGROUP mygroup consumer1 COUNT 2 STREAMY mystream>

Samozrejme, existuje veľa ďalších informácií o tom, ako fungujú skupiny spotrebiteľov. Skupiny spotrebiteľov Redis Streams sú určené na rozdelenie údajov, zotavenie po katastrofách a zaistenie bezpečnosti transakčných údajov. Všetko to vysvetlím v nasledujúcom článku.

Ako vidíte, s Redis Streams je ľahké začať. Stačí si stiahnuť a nainštalovať Redis 5.0 a ponoriť sa do tutoriálu Redis Streams na webovej stránke projektu.

Roshan Kumar je senior produktový manažér v spoločnostiRedis Labs. Má bohaté skúsenosti s vývojom softvéru a technologickým marketingom. Roshan pracoval v spoločnosti Hewlett-Packard a v mnohých úspešných startupoch v Silicon Valley vrátane ZillionTV, Salorix, Alopa a ActiveVideo. Ako nadšený programátor navrhol a vyvinul online platformu mindzeal.com, ktorá organizuje kurzy počítačového programovania pre mladých študentov. Roshan je držiteľom bakalárskeho titulu v odbore počítačových vied a titulu MBA na univerzite v Santa Clare.

Nové technologické fórum poskytuje miesto na preskúmanie a diskusiu o vznikajúcich podnikových technológiách v nebývalej hĺbke a šírke. Výber je subjektívny, založený na našom výbere technológií, ktoré považujeme za dôležité a pre čitateľov najväčší záujem. neprijíma marketingové záruky na zverejnenie a vyhradzuje si právo upravovať všetok prispievaný obsah. Všetky otázky posielajte na adresu[email protected].

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