Programování

Jak používat streamy Redis

Roshan Kumar je vedoucí produktový manažer ve společnosti Redis Labs.

Redis, multimodální databáze v paměti, je populární pro mnoho případů použití. Patří mezi ně ukládání do mezipaměti obsahu, úložiště relací, analýza v reálném čase, zprostředkování zpráv a streamování dat. Minulý rok jsem psal o tom, jak používat Redis Pub / Sub, seznamy a seřazené sady pro zpracování streamů v reálném čase. Nyní, s příchodem Redis 5.0, má Redis zcela novou datovou strukturu navrženou pro správu streamů.

S datovou strukturou Redis Streams můžete udělat mnohem víc, než bylo možné pomocí Pub / Sub, seznamů a seřazených sad. Mezi mnoha výhodami Redis Streams můžete provádět následující:

  • Sbírejte velké objemy dat přicházející vysokou rychlostí (jediným problémem je váš I / O sítě);
  • Vytvořte datový kanál mezi mnoha producenty a mnoha spotřebiteli;
  • Efektivně spravujte svoji spotřebu dat, i když producenti a spotřebitelé nepracují stejnou rychlostí;
  • Zachovat data, když jsou vaši zákazníci offline nebo odpojení;
  • Asynchronně komunikovat mezi výrobci a spotřebiteli;
  • Zvětšete svůj počet zákazníků;
  • Implementujte bezpečnost dat podobných transakcím, když spotřebitelé selhávají uprostřed konzumace dat; a
  • Efektivně využívejte hlavní paměť.

Nejlepší součástí Redis Streamů je, že je integrován do Redis, takže k nasazení nebo správě Redis Streamů nejsou nutné žádné další kroky. V tomto článku vás provedu základem používání Redis Streamů. Podíváme se na to, jak můžeme do streamu přidat data a jak můžeme tato data číst (najednou, asynchronně, jak přicházejí atd.), Abychom uspokojili různé případy použití spotřebiteli.

Ve dvou budoucích článcích zde budu diskutovat o tom, jak skupiny spotřebitelů Redis Streams fungují, a ukážu fungující aplikaci, která používá Redis Streams.

Pochopte tok dat ve streamech Redis

Redis Streams poskytuje datovou strukturu „pouze pro připojení“, která vypadá podobně jako protokoly. Nabízí příkazy, které vám umožňují přidávat zdroje do streamů, spotřebovávat streamy a sledovat a spravovat, jak se data spotřebovávají. Datová struktura Streamů je flexibilní a umožňuje vám propojit producenty a spotřebitele několika způsoby.

Redis Labs

Obrázek 1 ukazuje základní použití Redis Streamů. Jediný producent funguje jako zdroj dat a jeho spotřebitelem je aplikace pro zasílání zpráv, která odesílá data příslušným příjemcům.

Redis Labs

Na obrázku 2 běžný datový proud spotřebovává více než jeden spotřebitel. S Redis Streams mohou zákazníci číst a analyzovat data vlastním tempem.

V další aplikaci, která je znázorněna na obrázku 3, je situace trochu složitější. Tato služba přijímá data od více producentů a ukládá je všechny v datové struktuře Redis Streams. Aplikace má více spotřebitelů, kteří čtou data z Redis Streams, a také skupinu spotřebitelů, která podporuje spotřebitele, kteří nemohou fungovat stejnou rychlostí jako producenti.

Redis Labs

Přidejte data do streamu pomocí streamů Redis

Diagram na obrázku 3 ukazuje pouze jeden způsob přidání dat do Redis Stream. Ačkoli jeden nebo více producentů může přidat data do datové struktury, všechna nová data se vždy připojí na konec datového proudu.

Výchozí metoda pro přidávání dat

Toto je nejjednodušší způsob přidání dat do streamů Redis:

XADD mystream * jméno Anna

XADD mystream * jméno Bert

XADD mystream * jméno Cathy

V tomto příkazu je XADD příkaz Redis, mystream je název streamu, Anna, Bert a Cathy jsou jména přidaná do každého řádku a operátor * říká Redis, aby automaticky vygeneroval identifikátor pro každý řádek. Výsledkem tohoto příkazu jsou tři položky mystream:

1518951481323-0 jméno Cathy

1518951480723-0 jméno Bert

1518951480106-0 jméno Anna

Přidávání dat s ID spravovanými uživateli pro každou položku

Redis vám dává možnost zachovat pro každou položku svůj vlastní identifikátor (viz níže). I když to může být v některých případech užitečné, spoléhat se na automaticky generovaná ID je obvykle jednodušší.

XADD mystream 10000000 jméno Anna

XADD mystream 10000001 jméno Bert

XADD mystream 10000002 název Cathy

Výsledkem jsou následující položky mystream:

10000002-0 jméno Cathy

10000001-0 jméno Bert

10000000-0 jméno Anna

Přidávání dat s maximálním limitem

Stream můžete omezit maximálním počtem záznamů:

XADD mystream MAXLEN 10 000 000 * jméno Anna

XADD mystream MAXLEN 10 000 000 * jméno Bert

XADD mystream MAXLEN 1000000 * jméno Cathy

Tento příkaz vypudí starší položky, když stream dosáhne délky kolem 1 000 000.

Tip: Redis Streams ukládá data do makro uzlů stromu radix. Každý uzel makra má několik datových položek (obvykle v rozmezí několika desítek). Přidáním přibližné hodnoty MAXLEN, jak je znázorněno níže, se vyhnete nutnosti manipulace s uzlem makra pro každé vložení. Pokud vám několik desítek čísel - např. 1000000 nebo 1000050 - udělá malý rozdíl, můžete svůj výkon optimalizovat voláním příkazu s aproximačním znakem (~).

XADD mystream MAXLEN ~ 10 000 000 * jméno Anna

XADD mystream MAXLEN ~ 10 000 000 * jméno Bert

XADD mystream MAXLEN ~ 10 000 000 * jméno Cathy

Spotřebujte data ze streamu pomocí Redis Streams

Struktura Redis Streams nabízí bohatou sadu příkazů a funkcí, které umožňují využívat vaše data různými způsoby.

Přečtěte si vše od začátku streamu

Situace: Stream již obsahuje data, která potřebujete zpracovat, a chcete je zpracovávat vše od začátku.

Příkaz, který k tomu použijete, je XREAD, který vám umožní přečíst všechny nebo první N položky od začátku streamu. Jako osvědčený postup je vždy dobré číst datovou stránku po stránce. Chcete-li přečíst až 100 záznamů od začátku streamu, je příkaz:

XREAD COUNT 100 STREAMS mystream 0

Za předpokladu, že 1518951481323-0 je poslední ID položky, kterou jste obdrželi v předchozím příkazu, můžete dalších 100 položek načíst spuštěním:

XREAD COUNT 100 STREAMS mystream 1518951481323-1

Spotřebovat data asynchronně (prostřednictvím blokujícího volání)

Situace: Váš spotřebitel spotřebovává a zpracovává data rychleji, než je rychlost přidávání dat do streamu.

Existuje mnoho případů použití, kdy spotřebitel čte rychleji, než producenti přidají data do vašeho streamu. V těchto scénářích chcete, aby spotřebitel počkal a byl upozorněn, když dorazí nová data. Možnost BLOCK (Blokovat) umožňuje určit dobu čekání na nová data: 

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Zde XREAD vrátí všechna data po 1518951123456-1. Pokud poté nebudou k dispozici žádná data, bude dotaz čekat N = 60 sekund, než dorazí nová data, a poté vyprší časový limit. Pokud chcete tento příkaz blokovat nekonečně, zavolejte XREAD následovně:

XREAD BLOCK 0 STREAMS mystream 1518951123456-1 

Poznámka: V tomto příkladu můžete také načíst datovou stránku po stránce pomocí příkazu XRANGE. 

Jakmile dorazí, přečtěte si pouze nová data

Situace: Zajímáte se o zpracování pouze nové sady dat počínaje od aktuálního časového bodu.

Když čtete data opakovaně, je vždy dobré začít znovu tam, kde jste přestali. Například v předchozím příkladu jste provedli blokující volání ke čtení dat větších než 1518951123456-1. Pro začátek možná nebudete znát nejnovější ID. V takových případech můžete začít číst stream se znakem $, který říká příkazu XREAD, aby načetl pouze nová data. Protože toto volání využívá možnost BLOKOVÁNÍ s 60 sekundami, bude čekat, až budou ve streamu nějaká data.

XREAD BLOCK 60000 STREAMŮ mystream $

V takovém případě začnete číst nová data s možností $. Následující možnost byste však neměli provádět s možností $. Například pokud 1518951123456-0 je ID dat získaných v předchozích hovorech, váš další hovor by měl být:

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Iterujte stream a přečtěte si minulá data

Situace: Váš datový proud již má dostatek dat a chcete jej dotazovat a analyzovat dosud shromážděná data.

Data mezi dvěma položkami můžete číst dopředu nebo dozadu pomocí XRANGE a XREVRANGE. V tomto příkladu příkaz načte data mezi 1518951123450-0 a 1518951123460-0:

XRANGE mystream 1518951123450-0 1518951123460-0

XRANGE také umožňuje omezit počet vrácených položek pomocí možnosti POČET. Například následující dotaz vrátí prvních 10 položek mezi dvěma intervaly. S touto možností můžete iterovat proudem stejně jako pomocí příkazu SCAN:

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

Pokud neznáte dolní nebo horní mez dotazu, můžete nahradit dolní mez - a horní mez +. Například následující dotaz vrátí prvních 10 položek od začátku vašeho streamu:

XRANGE mystream - + POČET 10

Syntaxe pro XREVRANGE je podobná XRANGE, kromě toho, že změníte pořadí dolních a horních mezí. Například následující dotaz vrátí prvních 10 položek z konce vašeho streamu v opačném pořadí:

XREVRANGE mystream + - POČET 10

Rozdělte data mezi více než jednoho spotřebitele

Situace: Spotřebitelé spotřebovávají vaše data mnohem pomaleji než producenti.

V určitých případech, včetně zpracování obrazu, hlubokého učení a analýzy sentimentu, mohou být spotřebitelé ve srovnání s producenty velmi pomalí. V těchto případech porovnáte rychlost přicházejících dat s daty, která se spotřebovávají rozdělováním vašich spotřebitelů a rozdělením dat spotřebovaných každým z nich.

S Redis Streams můžete k dosažení tohoto cíle použít skupiny spotřebitelů. Když je součástí skupiny více než jeden spotřebitel, Redis Streams zajistí, že každý spotřebitel obdrží exkluzivní sadu dat.

SKUPINA XREADGROUP mygroup consumer1 POČET 2 STREAMY mystream>

Samozřejmě existuje spousta dalších informací o tom, jak skupiny spotřebitelů fungují. Skupiny spotřebitelů Redis Streams jsou navrženy tak, aby rozdělovaly data, obnovovaly se po katastrofách a zajišťovaly bezpečnost transakčních dat. To vše vysvětlím ve svém příštím článku zde.

Jak vidíte, je snadné začít s Redis Streams. Stačí stáhnout a nainstalovat Redis 5.0 a ponořit se do tutoriálu Redis Streams na webových stránkách projektu.

Roshan Kumar je senior produktový manažer ve společnostiRedis Labs. Má bohaté zkušenosti s vývojem softwaru a technologickým marketingem. Roshan pracoval ve společnosti Hewlett-Packard a v mnoha úspěšných startupech ze Silicon Valley, včetně ZillionTV, Salorix, Alopa a ActiveVideo. Jako nadšený programátor navrhl a vyvinul mindzeal.com, online platformu hostující kurzy programování pro mladé studenty. Roshan je držitelem bakalářského titulu v oboru počítačových věd a MBA na univerzitě v Santa Clara.

Nové technologické fórum poskytuje místo, kde můžete prozkoumat a diskutovat o nově vznikajících podnikových technologiích v nebývalé hloubce a šíři. Výběr je subjektivní, založený na našem výběru technologií, které považujeme za důležité a pro čtenáře nejzajímavější. nepřijímá marketingové materiály ke zveřejnění a vyhrazuje si právo upravovat veškerý přispěný obsah. Všechny dotazy zasílejte na adresu[email protected].

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