Zestawy sortowane w Redis zawierają unikalne, nie powtarzające się elementów typu ciągów w uporządkowany sposób. Domyślnie członkowie sortowanego zestawu są uporządkowane w kolejności rosnącej według ich wartości wyników. Ponadto sortowane zestawy utrzymują indeks oparty na zero, w którym członkowie są oceniani jako 0, 1,… i tak dalej. Ilekroć wyniki są podobne wśród dwóch lub więcej członków, zamówienie zostanie wykonane według porządku leksykograficznego. Ponieważ posortowane elementy ustawione są już zamówione, członkowie mogą być zapytane według rangi lub wyniku w szybkim stylu. Ponadto zestawy sortowane w Redis są zbudowane na podwójnej strukturze danych, która umożliwia realizację, odczyt, usuwanie i aktualizację w O (log (n)) złożoność czasu.
W tym przewodniku skupimy się na poleceniu Zrange, które można użyć do zapytania o szereg członków według ich wyników, indeksów lub leksykograficznie.
Polecenie Zrange
Polecenie Zrange służy do pobierania zakresu członków posortowanego zestawu przechowywanego w danym kluczu. To polecenie pozwala zapytać o szereg elementów opartych na różnych właściwościach, takich jak ranga, wynik lub porządek leksykograficzny. Domyślnie polecenie Zrange używa zakresu opartego na indeksie. Podstawowa składnia polecenia Zrange jest następujące.
Składnia:
Zrange sorted_set_key start End [byscore | BYLEX] [Rev] [Limit offset liczba przesunięcia] [zscores]
Powyższe argumenty są obowiązkowe dla tego polecenia, a niektóre opcjonalne argumenty można określić w następujący sposób.
Jak wspomniano, polecenie Zrange zwraca listę członków w danym zakresie posortowanego zestawu zapisanego w danym kluczu. Jeśli określono argument z scores, powiązany wynik zostanie wyświetlony. Zaczynając od Redis wersja 6.2.0, Zrevrange, ZrangeByscore, ZrevrangeByscore, ZrangeBlex, polecenia ZrevrangeBlex można zastąpić za pomocą polecenia Zrange.
Przypadek użycia 01 - Odzyskanie 3 najlepszych użytkowników z najniższymi punktami doświadczenia na tablicy liderów gry
Zakres oparty na indeksie
Załóżmy, że gra online, w której każdy użytkownik jest nagradzany punktami doświadczenia w oparciu o liczbę ukończonych misji. Struktura danych sortowanej z zestawu Redis jest idealnym kandydatem do przechowywania tych informacji, jak pokazano następujące.
Zadd OnlineGameusers 3000 „Jack”
Zadd OnlineGameusers 100 „Rihana”
Zadd OnlineGameusers 1250 „Niku”
Zadd OnlineGameusers 800 „Abigirl”
Zadd OnlineGameusers 4500 „Dickson”
Jak widać, punkty doświadczenia w grze zostały zapisane jako wynik każdego członka.
Sprawdźmy nowo utworzony sortowany zestaw zapisany w kluczu „OnlineGameusers”. Ponieważ domyślne zapytanie zakresu jest oparte na indeksach, będziemy określać minimalne i maksymalne granice jako 0 i 5.
Zrange OnlineGameUsers 0 5 z sesorami
Zgodnie z oczekiwaniami członkowie są sortowani według wyników w kolejności rosnącej. Przejrzyjmy trzech najlepszych użytkowników z najniższymi punktami doświadczenia. Ponieważ zestaw jest sortowany w kolejności rosnącej, szybkie i trywialne jest zdobycie trzech najlepszych członków z najniższymi punktami w następujący sposób.
Zrange OnlineGameUsers 0 2 z scores
Jak omówiono wcześniej, sortowane zestawy mają indeksy oparte na zerowej. Stąd pierwsze trzy elementy można określić jako zakres indeksu, zaczynając od 0 do 2. Wyjście powinno wyświetlić 3 najlepsze elementy z najniższymi wynikami w następujący sposób.
Przypadek użycia 02 - Odzyskiwanie użytkowników z ponad 3000 punktów doświadczenia na tablicy liderów gry
W tym scenariuszu musimy zapytać wszystkich użytkowników, którzy mają ponad 1000 punktów doświadczenia. Ponieważ mówimy o zakresie opartym na wynikach, użyjmy opcjonalnego argumentu BYSCORE, aby określić zakres wartości wyników.
Zrange OnlineGameUsers (3000 +inf byscore withscores
Granice zakresu zostały określone przy użyciu wyników. Ponieważ potrzebujemy wyników ponad 3000, wynik 3000 musi zostać wykluczony. Komenda Zrange obsługuje wykluczenie wyników poprzez prefiksowanie go za pomocą „(” (.
Zgodnie z oczekiwaniami, mamy tylko jednego członka, którego punkt doświadczenia (wynik) wynosi ponad 3000.
Przypadek użycia 03: Uzyskanie 3 najlepszych użytkowników, których najwyższe punkty doświadczenia
Domyślnie sortowany zestaw zamawia swoje elementy w kolejności rosnącej. Stąd członek o najniższym wyniku jest ustawiony na 0. indeksie. Aby uzyskać 3 najlepszych użytkowników o najwyższych wynikach, musimy przekazać argument obrotowy do polecenia Zrange w następujący sposób. Zamów sortowany zestaw w kolejności malejącej i zapytanie o zakres indeksu od 0 do 2.
Zrange OnlineGameusers 0 2 zscores Rev
Przypadek użycia 04 - Odzyskiwanie użytkowników, których nazwa zaczyna się od „L” lub następującej litery
Polecenie Zrange pozwala odzyskać szereg członków na podstawie wartości leksykograficznych, jeśli wyniki są podobne wśród członków. Zresetujmy wszystkie wyniki do 0 w następujący sposób.
Zadd OnlineGameusers 0 „Jack”
Zadd OnlineGameusers 0 „Rihana”
Zadd OnlineGameusers 0 „Niku”
Zadd OnlineGameusers 0 „Abigirl”
Zadd OnlineGameusers 0 „Dickson”
Zgodnie z oczekiwaniami punkty doświadczenia (wyniki) zostały zresetowane do 0, jak pokazano następujące.
Użyjmy argumentu BYLEX, aby odzyskać członków, których nazwiska zaczynają się od litery „L” lub następujący list.
Zrange OnlineGameUsers [L + BYLEX
Granice zakresu zostały określone przy użyciu wartości ciągów (leksykograficzne). Dane wyjściowe powinny być wszystkich członków, których nazwiska zaczynają się od litery „l” lub następująca litera. Idealnie, „Niku”, „Rihana” i „Dickson” powinny być wyjściem. Mała litera „D” pojawia się po wielkim „L” zgodnie z ich wartościami ASCII.
Wniosek
Podsumowując, polecenie Zrange służy do pobierania zakresu członków przechowywanych w sortowanym zestawie przechowywanym w danym kluczu. Jak wspomniano, to polecenie pozwala na zapytanie o zakres ustawionych elementów według ich wyników, szeregów lub wartości leksykograficznych. Również polecenie Zrange można użyć z argumentem obrotowym, aby odwrócić kolejność sortowania. Ogólnie rzecz biorąc, kilka możliwości jest pakowanych w to polecenie i stało się zamiennikiem kilku poleceń, takich jak ZrangeBlex, ZrangeByscore itp.