Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak zrobić podstawowy WATCH za pomocą StackExchange.Redis

Powód WATCH nie jest ujawniany bezpośrednio ze względu na sposób, w jaki SE.Redis jest zaprojektowany do multipleksowania poleceń z różnych stosów wywołań w jednym połączeniu. To sprawia, że ​​każda transakcja musi być bardzo ściśle zarządzany.

Nie jestem do końca jasne, jaki byłby cel „niezmienionego” samego w sobie , bez porównania z jakąś znaną wartością - w przeciwnym razie tworzysz tylko warunek wyścigu. Na pewno byłoby możliwe dodanie obsługi, ale naprawdę chciałbym najpierw zrozumieć oczekiwany przypadek użycia. Czy możesz wyjaśnić?

Ponownie swoją edycję; Twój preferowany przykład (ostatni) po prostu nie jest możliwy z redis - nic wspólnego z SE.Redis; jeśli wykonasz GET wewnątrz MULTI , nie otrzymasz odpowiedzi, dopóki EXEC kończy się - więc nie możesz użyć wartości w SET :nie jest jeszcze dostępne .

Gdyby nie multipleksowanie, możesz nieco zmienić kolejność drugiego przykładu (na podstawie tego, co robi SE.Redis):

WATCH key
val = GET key
MULTI
val = val + 1
SET key $val
EXEC

to jest typowy użycie WATCH :ty oglądasz rzeczy, o które pytasz z wyprzedzeniem, wiesz, że {key} nie zmienia się podczas tej pętli (lub przynajmniej transakcja zostanie przerwana; brak niespójnego stanu). Jednak WATCH nie działa dobrze z multiplekserem , dlatego SE.Redis zmusza Cię do podążania drogą pobierania wartości przed transakcją , a następnie umożliwiając porównanie wartości w celu stwierdzenia, że ​​jest niezmieniona. Ten sam wynik; nieco inne podejście, ale jest bezpieczne dla multipleksera. Więcej informacji na ten temat znajdziesz tutaj.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy Redigo Redis Pool naprawdę ma być zmienną globalną?

  2. LogicException:Upewnij się, że rozszerzenie PHP Redis jest zainstalowane i włączone

  3. Ustaw wygaśnięcie pamięci podręcznej Redis na 1 rok

  4. obsługa sytuacji redis maxmemory z railsami podczas korzystania z pamięci podręcznej rails

  5. Uruchamianie nadzorowane z hosta, seler z virtualenv (aplikacja Django)