WATCH / UNWATCH în Redis & In-Memory Data Store

Urmărește chei înaintea unei tranzacții; dacă altcineva le modifică până la EXEC, tranzacția nu se mai execută.

Sintaxă comandă
WATCH key [key ...]
UNWATCH

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

  • WATCH trebuie dat înainte de MULTI; î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.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: WATCH / UNWATCH

Ai o nelămurire despre utilizarea comenzii WATCH / UNWATCH sau 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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.