Ce face LMOVE / BLMOVE
LMOVE (din Redis 6.2.0) scoate un element din source și îl pune în destination, într-un singur pas atomic. Primul LEFT/RIGHT spune din ce capăt se scoate, al doilea în ce capăt se pune.
Este baza unei cozi sigure: workerul mută sarcina în lista „în lucru”, o procesează și apoi o șterge de acolo cu LREM. Dacă workerul cade, sarcina rămâne în „în lucru” și poate fi reluată. BLMOVE este varianta care așteaptă. Ele înlocuiesc comenzile RPOPLPUSH și BRPOPLPUSH, depreciate din 6.2.0.
Parametri
| Parametru | Descriere |
|---|---|
source / destination |
Lista sursă și lista destinație (pot fi aceeași, pentru rotație). |
LEFT | RIGHT (primul) |
Capătul din care se scoate elementul. |
LEFT | RIGHT (al doilea) |
Capătul în care se pune elementul. |
timeout |
Doar la BLMOVE: secunde de așteptare. |
Ce returnează
Elementul mutat sau (nil) dacă sursa e goală (la BLMOVE: dacă a expirat timpul).
Exemple
Exemplul 1: Coadă sigură cu listă „în lucru”
Sarcina e mutată, procesată, apoi ștearsă din lista de lucru.
RPUSH sarcini:noi email:ana email:dan
LMOVE sarcini:noi sarcini:lucru LEFT RIGHT
LRANGE sarcini:lucru 0 -1
LREM sarcini:lucru 1 email:ana
Ieșire în redis-cli
127.0.0.1:6379> RPUSH sarcini:noi email:ana email:dan
(integer) 2
127.0.0.1:6379> LMOVE sarcini:noi sarcini:lucru LEFT RIGHT
"email:ana"
127.0.0.1:6379> LRANGE sarcini:lucru 0 -1
1) "email:ana"
127.0.0.1:6379> LREM sarcini:lucru 1 email:ana
(integer) 1
Exemplul 2: Rotația unei liste
Cu aceeași listă ca sursă și destinație, primul element trece la final (util pentru distribuire round-robin).
RPUSH servere s1 s2 s3
LMOVE servere servere LEFT RIGHT
LRANGE servere 0 -1
Ieșire în redis-cli
127.0.0.1:6379> RPUSH servere s1 s2 s3
(integer) 3
127.0.0.1:6379> LMOVE servere servere LEFT RIGHT
"s1"
127.0.0.1:6379> LRANGE servere 0 -1
1) "s2"
2) "s3"
3) "s1"
Greșeli frecvente
- Ordinea direcțiilor contează:
LEFT RIGHTscoate din stânga și pune în dreapta. - Fără un proces care verifică periodic lista „în lucru”, sarcinile workerilor căzuți rămân acolo pentru totdeauna.
Comenzi înrudite
LPOP / RPOP: Scoate și întoarce primul (LPOP) sau ultimul (RPOP) element dintr-o listă; cu count, mai multe deodată.BLPOP / BRPOP: Scoate primul element dintr-o listă; dacă toate listele sunt goale, așteaptă (blochează) până apare un element sau expiră timpul.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.