Ce face WATCH / UNWATCH
WATCH implementează blocarea optimistă (check-and-set). Urmărești o cheie, îi citești valoarea, decizi în aplicație ce scrii, apoi trimiți MULTI … EXEC. Dacă între WATCH și EXEC alt client a modificat cheia, EXEC întoarce (nil) și nu execută nimic; aplicația reîncearcă.
EXEC și DISCARD anulează automat toate urmăririle. UNWATCH le anulează manual, de exemplu când decizi să nu mai faci tranzacția.
Parametri
| Parametru | Descriere |
|---|---|
key ... |
Cheile urmărite. |
Ce returnează
Mereu OK. Efectul se vede la EXEC: lista răspunsurilor sau (nil) dacă tranzacția a fost anulată.
Exemple
Exemplul 1: Plată din sold, fără conflict
Nimeni nu a modificat soldul între WATCH și EXEC, deci tranzacția se execută.
WATCH sold:ana
GET sold:ana
MULTI
DECRBY sold:ana 30
EXEC
Ieșire în redis-cli
127.0.0.1:6379> WATCH sold:ana
OK
127.0.0.1:6379> GET sold:ana
"100"
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> DECRBY sold:ana 30
QUEUED
127.0.0.1:6379(TX)> EXEC
1) (integer) 70
Exemplul 2: Alt client modifică soldul între timp
După GET, alt client a rulat DECRBY sold:ana 50. EXEC întoarce (nil): plata nu s-a făcut, iar aplicația trebuie să reîncerce.
WATCH sold:ana
GET sold:ana
MULTI
DECRBY sold:ana 60
EXEC
Ieșire în redis-cli
127.0.0.1:6379> WATCH sold:ana
OK
127.0.0.1:6379> GET sold:ana
"70"
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> DECRBY sold:ana 60
QUEUED
127.0.0.1:6379(TX)> EXEC
(nil)
Greșeli frecvente
WATCHtrebuie dat înainte deMULTI; în interiorul tranzacției dă eroare.- Pe chei foarte disputate, reîncercările pot fi multe; acolo un script Lua (
EVAL) sau o funcție Redis e mai eficientă.
Comenzi înrudite
MULTI / EXEC / DISCARD: Grupează mai multe comenzi într-o tranzacție: Redis le execută pe toate, în ordine, fără să intercaleze comenzile altor clienți.GET: Citește valoarea text salvată la o cheie; întoarce nil dacă cheia nu există.INCR / INCRBY / DECR: Crește sau scade atomic un număr salvat într-o cheie; ideal pentru contoare de vizite, stocuri și ID-uri.
Întrebări & Exemple de Cod:
WATCH / UNWATCHAi o nelămurire despre utilizarea comenzii
WATCH / UNWATCHsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.