XREAD în Redis & In-Memory Data Store

Citește intrări noi din unul sau mai multe stream-uri, după un ID dat, opțional așteptând (BLOCK) până apar date.

Sintaxă comandă
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]

Ce face XREAD

XREAD întoarce intrările cu ID mai mare decât cel dat pentru fiecare stream. Cu ID-ul 0 citești de la început; cu $ (împreună cu BLOCK) aștepți doar intrările care vin de acum înainte.

Cuvântul STREAMS trebuie să fie ultimul: după el vin întâi toate cheile, apoi toate ID-urile, în aceeași ordine. Spre deosebire de Pub/Sub, mesajele rămân în stream, deci un client care a fost deconectat poate continua de la ultimul ID văzut.

Parametri

Parametru Descriere
COUNT count Maximum de intrări întoarse pe stream.
BLOCK milliseconds Așteaptă până la atâtea milisecunde dacă nu sunt date (0 = la nesfârșit).
STREAMS key ... id ... Stream-urile și, pentru fiecare, ID-ul după care se citește ($ = doar intrări noi).

Ce returnează

O listă cu câte un element pe stream: numele lui și intrările (ID + câmpuri). (nil) dacă a expirat BLOCK.

Exemple

Exemplul 1: Citirea de la început

COUNT 1 întoarce doar prima intrare; pentru următoarea, reiei de la ID-ul primit.

XREAD COUNT 1 STREAMS comenzi 0
XREAD COUNT 1 STREAMS comenzi 1792915200000-0

Ieșire în redis-cli

127.0.0.1:6379> XREAD COUNT 1 STREAMS comenzi 0
1) 1) "comenzi"
   2) 1) 1) "1792915200000-0"
         2) 1) "client"
            2) "Ana"
            3) "oras"
            4) "Iasi"
            5) "total"
            6) "120"
127.0.0.1:6379> XREAD COUNT 1 STREAMS comenzi 1792915200000-0
1) 1) "comenzi"
   2) 1) 1) "1792915260000-0"
         2) 1) "client"
            2) "Dan"
            3) "oras"
            4) "Cluj"
            5) "total"
            6) "85"

Exemplul 2: Așteptarea unor comenzi noi

Cu $ și BLOCK 5000, clientul așteaptă 5 secunde intrări noi. Nu a venit nimic, deci răspunsul este (nil).

XREAD BLOCK 5000 STREAMS comenzi $

Ieșire în redis-cli

127.0.0.1:6379> XREAD BLOCK 5000 STREAMS comenzi $
(nil)
(5.02s)

Greșeli frecvente

  • Nu folosi $ într-o buclă: la fiecare apel ai pierde intrările venite între două citiri. Folosește $ doar prima dată, apoi ultimul ID primit.
  • Dacă mai mulți workeri trebuie să-și împartă mesajele (fiecare mesaj procesat o singură dată), folosește grupuri de consumatori cu XREADGROUP.

Comenzi înrudite

  • XADD: Adaugă un eveniment (o intrare cu câmpuri și valori) la finalul unui stream Redis și întoarce ID-ul lui.
  • XRANGE / XREVRANGE: Citește intrările unui stream dintre două ID-uri, în ordine crescătoare (XRANGE) sau descrescătoare (XREVRANGE).
  • XREADGROUP: Citește mesaje dintr-un stream ca membru al unui grup de consumatori; fiecare mesaj ajunge la un singur consumator.
  • SUBSCRIBE / PSUBSCRIBE: Abonează clientul la unul sau mai multe canale Pub/Sub (SUBSCRIBE) sau la canale după un tipar (PSUBSCRIBE).