Wprowadzenie do zestawów sortowanych Redis

Wprowadzenie do zestawów sortowanych Redis
Zestawy sortowane Redis to bardziej zaawansowana wersja zestawów. Zestaw posortowany dziedziczy wszystkie właściwości ze struktury danych zestawu Redis. Ponadto utrzymują kolejność utrzymywanych elementów. Każdy członek sortowanego zestawu ma wynik używany do zamówienia zestawu zestawu w kolejności rosnącej.

Zestawy posortowane są bardzo szybkie w dodawaniu, aktualizowaniu i usuwaniu swoich członków. Ma złożoność czasu logarytmicznego dla wszystkich tych operacji. Ponieważ członkowie są uporządkowani, dostęp do środkowego elementu jest również bardzo wydajny. Stąd sortowany zestaw byłby idealny do wdrażania aplikacji w czasie rzeczywistym, takich jak tablice gier online, kolejki priorytetów o niskim opóźnieniu i indeksy wtórne.

Polecenie Zadd

Dostępnych jest kilka poleceń do obsługi na sortowanych zestawach. Zadd Polecenie służy do dodania jednego lub wielu elementów z wynikami do posortowanego zestawu przechowywanego w danym kluczu. Złożoność czasu tego polecenia jest proporcjonalna do logarytmu liczby elementów. Stąd jest znacznie szybszy niż większość innych poleceń Redis.

Ilekroć dodamy członków za pomocą polecenia Zadd, istnieją pewne bezpośrednie efekty, które mają miejsce w sortowanym zestawie.

Ponieważ sortowany zestaw zawiera unikalny zestaw członków, nie pozwala na dodanie już określonych członków do sortowanego zestawu. Zamiast tego zaktualizuje wynik tego konkretnego członka i umieści ten element we właściwym indeksie, aby utrzymać prawidłową kolejność.

Jeśli sortowany klucz zestaw nie istnieje, polecenie Zadd utworzy sortowany zestaw i doda wszystkie określone elementy.

Jeśli klucz istnieje, ale nie powinien przechowywać sortowanej wartości typu, wówczas podnosi błąd.

Składnia

Zadd [NX | XX] [GT | LT] [CH] [inc] [Członek wyników…]

Zwykle polecenie Zadd zwraca liczbę dodanych członków do sortowanego zestawu. Stąd ignoruje aktualizacje wyników dla już istniejących członków. Ta wartość zwracana zmieni się, jeśli Ch Podano opcję. Stąd liczba wszystkich zmienionych członków zostanie zwrócona przez polecenie Zadd. Ta liczba obejmuje sumę nowo dodanej i wyniku zmienił członków.

Przykład 01 - tabela liderów gier online

Załóżmy scenariusz, w którym musimy zarządzać tablicą użytkowników w grze przygodowej online, w którą grają tysiące użytkowników na całym świecie. Charakter gry polega na tym, że każdy użytkownik zarabia złoto na pomyślne zakończenie każdej misji. Zestaw posortowany Redis byłby idealną strukturą danych, z której możemy użyć dla tego typu aplikacji o niskim opóźnieniu w czasie rzeczywistym.

Będziemy tworzyć sortowany zestaw zidentyfikowany przez klucz Gameleaderboard. Ponadto kilku graczy zostanie dodanych jako posortowani członkowie zestawu z różnymi wynikami. Kwota złota każdego użytkownika zostanie zmapowana jako sortowany wynik.

Dodawanie wielu członków z Zadd

Zadd Gameleaderboard 2300 gracz: 1 1400 gracz: 2 800 graczy: 3 3500 graczy: 4 4000 graczy: 5

Wyjście:

Zgodnie z oczekiwaniami wartość zwrotu wynosi 5. Jest to liczba członków dodanych do posortowanego zestawu przechowywanego w kluczu Gameleaderboard.

Sprawdźmy, czy sortowany zestaw zawiera wszystkich członków w uporządkowany sposób. Możemy użyć polecenia Zrange, aby zapytać wszystkich członków z ich wynikami, jak pokazano następująco:

Zrange GameLeaderboard 0 10 z sesorami

Jak wspomniano, Gameleaderboard Sortowany zestaw przechowuje swoich członków w kolejności rosnącej na podstawie ich wyników.

Dodanie nowy członek o takim samym wyniku co istniejący członek

Spróbujmy dodać innego użytkownika Gamer: 6 Z złotą ilością 3500. Zestawy sortowane Redis umożliwiają wstawienie członków o tej samej wartości wyniku. Stąd ta operacja powinna z powodzeniem dodać Gamer: 6.

Zadd Gameleaderboard 3500 Gamer: 6

Wyjście:

Zgodnie z oczekiwaniami, wartość zwrotna wynosi 1, która weryfikuje pomyślnie dodany element.

Sprawdźmy ponownie posortowane elementy zestawu za pomocą polecenia Zrange.

Członek Gamer: 6 został wstawiony tuż po Gamer: 4. Zestawy sortowane w Redis Użyj kolejności leksykograficznej, jeśli wartości wyników są takie same dla określonych członków. Porównuje ciągi członkowskie jako szereg bajtów i odpowiednio zamawia.

Zastosowanie opcji NX i XX z Zadd

Załóżmy, że musimy tylko zaktualizować wynik istniejącego członka i nie dodawać żadnych nowych członków do sortowanego zestawu Gameleaderboard. Xx Opcja jest używana do osiągnięcia tego.

Zadd GameLeaderboard XX 3500 Gamer: 7 3000 Gamer: 5

Zgodnie z oczekiwaniami wartość zwrotu wynosi 0, co oznacza, że ​​nie dodano nowych członków. Będziemy ponownie sprawdzić sortowany zestaw.

Gamer: 7 członek nie został dodany do sortowanego zestawu, ale Gamer: 5 Wynik członka został zmodyfikowany i jest odpowiednio umieszczony.

Nx opcja wykonuje dokładnie przeciwieństwo Xx.

Zadd GameLeaderboard NX 5500 Gamer: 7 4000 Gamer: 5

Sprawdźmy ponownie sortowany zestaw.

Jak wspomniano powyżej, nowy członek Gamer: 7 został pomyślnie dodany. Gamer: 5 Wartość wyniku nie została zmodyfikowana.

Wykorzystanie opcji LT i GT z Zadd

Opcje LT i GT są bardzo przydatne, gdy trzeba warunkowo aktualizować wartości wyników. Każda z tych dwóch flag nie zapobiegnie dodaniu nowych elementów do sortowanego zestawu.

Ilekroć określisz opcję LT z poleceniem Zadd, modyfikuje wartość wyniku, jeśli i tylko wtedy, gdy nowy wynik jest mniejszy niż bieżący wynik tego elementu. Opcja GT zmodyfikuje wynik tylko wtedy, gdy nowy wynik jest większy niż bieżący wynik.

Zadd Gameleaderboard LT 2100 Gamer: 1 1500 gracz: 2

Sprawdźmy Gameleaderboard Zestaw posortowany.

Jak widać, gracz: 1 Poprzedni wynik członka wynosił 2300. Stąd wynik został zmieniony wraz z tą operacją i został zmieniony na 2100. gracz: 2-Wynik członka nie ulega zmianie, ponieważ jego poprzedni wynik był niższy niż nowy wynik.

Opcja CH

Zwykle polecenie Zadd zwraca liczbę dodanych członków. Z opcją CH zwróci sumę nowo dodanej i istniejących członków, których wyniki są modyfikowane.

Zadd GameLeaderboard CH 2100 Gamer: 8 1500 gracz: 2 3550 Gamer: 4

Po wykonaniu powyższego polecenia, gracz: 8 Członek musi zostać dodany. gracz: 2 I Gamer: 4 Wartości wyników członków muszą zostać zmodyfikowane. Stąd suma nowo dodanych i zmodyfikowanych członków wynosi 3.

Stosowanie z Opcja inclu w Zadd

Inkr Opcja zwiększy wynik członka według określonego numeru przyrostu. Polecenie Zadd zachowuje się dokładnie jak Zincrby.

Zwiększajmy Gamer: 7 wynik członka o kolejne 100, jak pokazano następująco

Zadd GameLeaderboard Inclu 100 Gamer: 7

Zgodnie z oczekiwaniami, poprzednia wartość wyniku została zwiększona o 100. Nowy wynik jest zwracany jako 5600.

Wniosek

Zestaw posortowany Redis to bardziej zaawansowana struktura danych, która dziedziczy wszystkie właściwości ze zwykłych zestawów. Sortowane zestawy są znacznie szybsze niż większość poleceń Redis. Stąd sortowane zestawy są szeroko stosowane w aplikacjach o niskim opóźnieniu w czasie rzeczywistym. Polecenie Zadd służy do utworzenia sortowanego zestawu w określonym klawiszu z wieloma członkami. Członkowie są uporządkowani na podstawie ich wartości wyników. Ilekroć wartości wyników są takie same dla wielu członków, zamówienie będzie wykonywane przy użyciu zamówienia leksykograficznego.