Polecenie Redis Watch

Polecenie Redis Watch
Jeśli poważnie myślisz o Redis, będziesz chciał używać transakcji do zarządzania swoimi danymi. Transakcje Redis nie różnią się bardzo od transakcji w relacyjnej bazie danych.

Transakcja bazy danych odnosi się do pojedynczej jednostki pracy składającej się z pojedynczych do wielu zapytań. W przypadkach operację można zaklasyfikować jako transakcję tylko wtedy, gdy występują jakieś zmiany w bazie danych.

Nie będziemy się tym martwić, ale nauczymy się, jak korzystać z polecenia zegarek wraz z transakcjami Redis dla tego.

Jakie są transakcje?

W Redis transakcje składają się z czterech głównych poleceń: obserwuj, wykonaj, odrzucaj i multi.

Korzystając z powyższych poleceń, możesz otworzyć blok i dodać wiele poleceń jednocześnie. Po zakończeniu uruchamiasz polecenia jako jedna jednostka.

Aby transakcja odniosła sukces, Redis zapewnia:

  1. Wszystkie polecenia określone w jednostce transakcyjnej są wykonywane kolejno. Stąd pierwszy, pierwszy bieg.
  2. Wszystkie polecenia w jednostce transakcyjnej muszą wykonać pomyślnie. Jeśli jedno z poleceń w urządzeniu nie powiedzie się, cały blok transakcji również się nie powiedzie. Ta funkcja jest znana jako wykonanie polecenia atomowego
  3. Po trzecie, polecenia w transakcji są serializowane. Stąd klient nie może być serwerem, podczas gdy jednostka transakcyjna działa.

Redis Utwórz transakcję

Tworzysz jednostkę transakcyjną za pomocą polecenia Multi. Multi Command powróci OK. Możesz iść naprzód i dodać wszystkie polecenia transakcyjne jeden po drugim.

Zamiast wykonywać polecenia, Redis będzie je w kolejce do wstawiania, dopóki ich nie zadzwonisz.

Przykładem jest to, jak pokazano poniżej:

127.0.0.1: 6379> Multi
OK

Redis Execute jednostka transakcyjna

Jak wspomniano, Redis będzie w kolejce polecenia w jednostce transakcyjnej, dopóki ich ręcznie je wykonasz.

Możemy to zrobić za pomocą polecenia exec. To mówi Redisowi, aby uruchomił wszystkie polecenia w kolejce w kolejności wstawiania.

Przykładem użycia jest jak pokazano poniżej:

127.0.0.1: 6379> Ustaw Newkey „100”
Kolejka
127.0.0.1: 6379> Inclue newkey
Kolejka
127.0.0.1: 6379> Zdobądź Newkey
Kolejka
127.0.0.1: 6379>

Zauważysz, że każde wykonane polecenie jest w kolejce. Kolejne polecenie to polecenie, które ma uruchomić po wywołaniu Exec.

Aby go uruchomić, zadzwoń do Exec jako:

127.0.0.1: 6379> Exec
1) OK
2) (liczba całkowita) 101
3) „101”

Powinno to wykonać wszystkie polecenia i zwraca wynikowe wartości.

Redis Usuń kolejkę poleceń

Załóżmy, że chcesz wyczyścić kolejkę poleceń i wypłukać wszystkie zaplanowane polecenia? W tym celu możesz użyć polecenia odrzutu, jak pokazano:

127.0.0.1: 6379> Multi
OK
127.0.0.1: 6379> Ustaw Newkey „100”
Kolejka
127.0.0.1: 6379> Inclue newkey
Kolejka
127.0.0.1: 6379> Zdobądź Newkey
Kolejka
127.0.0.1: 6379> Odrzuć
OK

Po uruchomieniu polecenia odrzucania Redis powróci OK i zamknie jednostkę transakcyjną.

Polecenie Redis Watch

Polecenie Watch w Redis umożliwia wdrożenie funkcji Check-and-Set. Polecenia zegarka akceptują klawisze Redis jako parametry i monitorują je.

Jeśli którykolwiek z określonych kluczy zostanie zmieniony przed wywołaniem polecenia EXEC, Redis automatycznie kończy transakcję i zwraca zerową odpowiedź.

Weź poniższy przykład:

var = zdobądź mykey
var = var + 1
Ustaw mykey $ var

W powyższym przykładzie mamy operację, która zwiększa wartość klucza o 1. Oczywiście nie jest to problem, jeśli tylko jeden klient wykonuje wspomnianą operację.

Jeśli jednak wielu klientów próbuje jednocześnie wykonać powyższą operację, występuje warunek wyścigu i zwraca nieprawidłową wartość.

Możemy to rozwiązać, oglądając klucz, jak pokazano:

Obejrzyj Mykey
var = zdobądź mykey
var = var + 1
WIELO
Ustaw mykey $ var
Exec

Tutaj, jeśli klient działa, a wartość klucza jest zmieniana przed wykonaniem transakcji, wykonanie się nie powiedzie.

Aby usunąć wszystkie oglądane klucze, użyj polecenia Unatch.

Wniosek

W tym artykule omówiono za pomocą i pracy z transakcjami w bazie danych Redis. Sprawdź dokumentację, aby odkryć więcej.

Dziękuje za przeczytanie!!