BLPOP / BRPOP în Redis & In-Memory Data Store

Comenzi pentru liste Redis 2.0.0

Scoate primul element dintr-o listă; dacă toate listele sunt goale, așteaptă (blochează) până apare un element sau expiră timpul.

Sintaxă comandă
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout

Ce face BLPOP / BRPOP

BLPOP este varianta blocantă a lui LPOP. Dacă lista are elemente, răspunde imediat; dacă e goală, clientul așteaptă până când alt client adaugă ceva sau până trece timeout secunde. Este baza workerilor care preiau sarcini dintr-o coadă.

Poți da mai multe liste: Redis le verifică în ordine și o scoate din prima care are elemente. Răspunsul conține și numele listei. timeout 0 înseamnă așteptare fără limită; din Redis 6.0 timeout-ul poate avea zecimale.

Parametri

Parametru Descriere
key ... Listele verificate, în ordinea priorității.
timeout Secunde de așteptare (0 = la nesfârșit; zecimale din Redis 6.0).

Ce returnează

O listă cu două elemente (numele listei, elementul scos) sau (nil) dacă timpul a expirat.

Exemple

Exemplul 1: Worker cu două cozi, una prioritară

Coada urgent e goală, așa că elementul vine din normal.

RPUSH coada:normal factura:1042
BLPOP coada:urgent coada:normal 5

Ieșire în redis-cli

127.0.0.1:6379> RPUSH coada:normal factura:1042
(integer) 1
127.0.0.1:6379> BLPOP coada:urgent coada:normal 5
1) "coada:normal"
2) "factura:1042"

Exemplul 2: Timpul de așteptare expiră

Nicio coadă nu primește elemente în 5 secunde. Pentru comenzile care durează peste o jumătate de secundă, redis-cli afișează și durata.

BLPOP coada:urgent coada:normal 5

Ieșire în redis-cli

127.0.0.1:6379> BLPOP coada:urgent coada:normal 5
(nil)
(5.01s)

Greșeli frecvente

  • Nu folosi BLPOP în interiorul MULTI sau al unui script Lua: acolo nu blochează, se comportă ca LPOP.
  • Un client blocat ține ocupată o conexiune; folosește conexiuni separate pentru workeri și pentru restul aplicației.
  • Dacă vrei să nu pierzi sarcina când workerul cade, folosește BLMOVE într-o listă de „în lucru”.

Comenzi înrudite

  • LPOP / RPOP: Scoate și întoarce primul (LPOP) sau ultimul (RPOP) element dintr-o listă; cu count, mai multe deodată.
  • LMOVE / BLMOVE: Mută atomic un element dintr-o listă în alta, alegând capătul din care scoate și capătul în care pune.
  • LPUSH / RPUSH: Adaugă elemente la începutul (LPUSH) sau la sfârșitul (RPUSH) unei liste, creând lista dacă lipsește.
  • XREADGROUP: Citește mesaje dintr-un stream ca membru al unui grup de consumatori; fiecare mesaj ajunge la un singur consumator.