Redis setnx

Redis setnx

Redis String Typ danych

Redis to w pamięci magazyn danych, który obsługuje bardziej złożone struktury danych w porównaniu z innymi magazynami danych o wartości kluczowej. Spośród wszystkich tych złożonych struktur danych, takich jak zestawy, skróty, mapy bitowe i listy, obsługuje również najbardziej nieskomplikowane typy ciągów. W takim przypadku klawisz łańcuchowy mapuje wartość ciągu. Zazwyczaj polecenia zestawu i GET są używane do tworzenia i pobierania danych dotyczących kluczowania w sklepie Redis. Ponadto polecenie set tworzy nowy klucz w pamięci i mapuje wartość ciągu, nic więcej niż to. Będzie zastąpić wartość, jeśli klucz już istnieje.

Nie jest wdrażany żaden mechanizm bezpieczeństwa domyślnie polecenie Set, aby obsłużyć mutacje wartości przez wielu klientów jednocześnie bez wzajemnej umowy. To polecenie należy wywołać za pomocą pomiarów bezpieczeństwa, takich jak mechanizm blokujący.

Warunkowe ustawianie wartości kluczowej

Zawsze lepiej jest postępować zgodnie z miarą bezpieczeństwa podczas mutowania wartości przechowywanej w danym kluczu. Stąd Redis wprowadził opcję do polecenia Set Nx To jest na miejscu i nie zmutuje wartości istniejącego klucza. To samo zachowanie zostało zaimplementowane z nowym poleceniem, które wyjaśniono w następnej sekcji.

Polecenie setnx

Komenda Setnx, jak sugeruje jego nazwa: „ustaw, jeśli nie istnieje ” co oznacza, że ​​polecenie ustawia wartość tylko wtedy, gdy określony klucz nie istnieje w magazynie danych. Ilekroć określony klucz już istnieje, polecenie nie będzie wykonywać żadnej operacji na tym kluczu. Z tym ograniczeniem polecenie setnx jest bezpieczniejsze niż polecenie set. Ponadto to polecenie ma stałą złożoność czasu.

Składnia:

Wartość setnx redis_key

redis_key: Unikalny identyfikator wpisu pary klawiszy Redis.

wartość: Wartość powiązana z kluczem Redis.

To polecenie zwróci odpowiedź całkowitą, w której klawisz 1 środka został ustawiony z nową wartością. Jeśli zwrócona wartość wynosi 0, klucz nie jest ustawiony, a istniejący klucz utrzyma starą wartość.

Przykład 01 - Mechanizm blokowania z setnx

Załóżmy, że gra online, w której wielu graczy uzyska dostęp do wspólnego złotego wiadra należącego do swojego zespołu. Gracze mogą uzyskać dostęp do złota i wypełnić go złotem, które znaleźli, odkrywając świat. Wyobraź sobie, że gracz One uzyskuje dostęp do złotego wiadra i upuszcza trochę złota w ustalonym okresie. Jednocześnie gracz dwa próbuje pochłonąć złoto z tego samego wiadra. W takim przypadku dostęp nie należy przekazywać graczowi drugiego, dopóki gracz One nie wypuści złotego wiadra. Można to zaimplementować za pomocą polecenia setnx z prostym mechanizmem blokującym.

Gracz: 1 może użyć polecenia setnx, aby ustawić całkowitą ilość złota w wiadrze. Załóżmy, że zamierzamy przechowywać złoto w kluczu Goldbucket.

Setnx Goldbucket 100

Zgodnie z oczekiwaniami, Goldbucket Klucz został utworzony o wartości 100. Teraz, Gracz: 1 ma zamek. Powiedzmy Gracz: 2 zadzwoni do polecenia setnx, aby ustawić nową kwotę złota.

Setnx Goldbucket 200

Tym razem polecenie zwraca 0, ponieważ klucz Goldbucket istnieje. Innymi słowy, klucz jest zablokowany przez Gracz: 1 już. Stąd gracz: 2 musi poczekać, aż gracz: 1 zwolni blokadę, usuwając lub automatyczne wygaśnięcie limitu czasu.

Sprawdźmy wartość powiązaną z Goldbucket klucz, jak pokazano następująco.

Zdobądź Goldbucket

Zgodnie z oczekiwaniami wartość wynosi nadal 100, co oznacza Gracz: 1 Zablokował już wartość danych. Stąd, Gracz: 2 musi nadal czekać, aż wygaśnie limit czasu i Gracz: 1 uwalnia to.

Może istnieć sytuacja w zakleszczce, jeśli klient awarie lub zawiedzie z powodu awarii sieci, a zamek nie został wydany przez rozbity klient. Wielu klientów może to zauważyć i spróbować usunąć blokadę za pomocą polecenia Del. W rezultacie każdy klient wielokrotnie usuwa własne klucze, co doprowadzi do impasu.

Można go rozwiązać przez każdego klienta, który z wyprzedzeniem sprawdzając znacznik czasu za pomocą polecenia getset, a następnie pozyskiwanie blokady za pomocą polecenia setnx, jeśli i tylko wtedy, gdy wygaśnięcie znacznika znacznika jest wygaśnięcia.

Wniosek

Podsumowując, Redis to sklep z kluczową wartością, który obsługuje najprostsze typy danych string. Jak wszyscy wiecie, ustaw i get są najbardziej podstawowymi poleceniami, których można użyć do tworzenia i pobierania par klawiszy Redis. Metoda ustawiona jest używana do tworzenia par kluczowych w bazie danych Redis, która ostatecznie zastępuje powiązaną wartość dla określonego klucza, jeśli klucz już istnieje w bazie danych. Jak wcześniej podkreślono w artykule, ta niebezpieczna mutacja wartości może być ograniczona za pomocą polecenia REDIS SETNX. Polecenie setnx ustawia wartość dla danego klucza, jeśli klucz nie istnieje. Ilekroć istnieje klucz, polecenie nic nie wykonuje i zwraca 0. Stąd polecenie setnx służy do wdrażania mechanizmów blokujących w aplikacjach w czasie rzeczywistym.