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 interiorulMULTIsau al unui script Lua: acolo nu blochează, se comportă caLPOP. - 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.