Jeśli chodzi o redis, wszyscy z niego korzystają, a najczęściej wykorzystywanym scenariuszem jest buforowanie danych.
recenzja
Począwszy od redis 2.6.0, redis ma wbudowany interpreter Lua i zapewnia komendę evaluacji do analizy skryptu Lua.
Składnia: eval script numkeys keys keys args
Parametry:
eval — Redis dostarcza polecenia do analizy skryptu lua
Skrypt — Skrypt Lua
numkeys — Określa liczbę kluczy w zestawie parametrów nazw klucza
keys — Zestaw parametrów nazw klucza, reprezentowany przez globalną tablicę zmiennej KEYS, zaczynającą się od indeksu 1
args — Zbiór parametrów klucz-wartość, reprezentowany przez tablicę zmiennych globalnych ARGV, zaczynając od indeksu 1
Zalety stosowania Lua w Redis
Zmniejsz narzut sieciowy. Wiele żądań może być wysyłanych jednocześnie w formie skryptów, aby zmniejszyć opóźnienia sieci Manipulacja atomowa. Redis wykona cały skrypt jako całość, bez żadnych innych komend wstawianych pomiędzy. Dlatego nie musisz martwić się o warunki wyścigu i transakcje podczas procesu scenariuszowego. Przywrócony. Kroki wysyłane przez klienta są trwale przechowywane w redis, aby inni klienci mogli ponownie używać skryptu bez konieczności stosowania kodu do realizacji tej samej logiki.
Atomowość skryptu
Skrypty Lua nie mogą wykonywać czasochłonnych operacji ani martwych pętli, w przeciwnym razie redis nie zaakceptuje innych poleceń i nie wykona się, aby zatrzymać działanie skryptu
Redis używa jednego interpretera Lua do uruchamiania wszystkich skryptów i zapewnia, że skrypty są wykonywane atomowo.Oznacza to, że podczas uruchamiania skryptu nie zostaną wykonane żadne inne skrypty ani polecenia redis! Dlatego jeśli obecny skrypt działa wolno, serwer może nie być w stanie wykonać polecenia, ponieważ jest zajęty, na przykład:
Każdy skrypt ma maksymalny limit czasu wykonywania, domyślna wartość to 5s. Maksymalny czas wykonania jest kontrolowany przez opcję limitu czasu lua w pliku konfiguracyjnym redis.conf lub bezpośrednio za pomocą poleceń config get i configset. Gdy wykonanie skryptu osiągnie maksymalny czas wykonania, Redis nie kończy go aktywnie, lecz wykonuje następujące kroki:
(1) Redis rejestruje, że skrypt kończy się
(2) Redis zaczyna ponownie przyjmować żądania od innych klientów, ale akceptuje tylko wykonywanie poleceń zabijania skryptu i wyłączanie nosave.
(3) Jeśli skrypt wykonuje tylko operacje odczytu, użyj polecenia zabicia skryptu, aby natychmiast zatrzymać skrypt; Jeśli skrypt wykona operację zapisu, jedynie polecenie shutdown save/nosave może zatrzymać serwer, aby zapobiec zapisowi bieżących danych na dysku. (W tym momencie serwer jest niedostępny i dane nie zostaną zapisane)
przykład
Wykonaj skrypt, parametry to 2 klucz i wartość, a polecenie wygląda następująco:
Deadloop skrypty, uruchamianie następującego skryptu powoduje, że redis nie będzie mógł przetwarzać innych poleceń i utknie:
Spróbuj użyć skryptu, aby dodać dane typu string za pomocą następującego polecenia:
Wykonaj bardziej złożone skrypty, jeśli wartość klucza jest równa przesłanej przez nas wartości, usuń pamięć podręczną, w przeciwnym razie zrób cokolwiek, polecenie wygląda następująco:
Wyniki wdrożenia są następujące:
(Koniec)
|