Redis Zrange

Redis Zrange

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]
  • sorted_set_key: Klucz posortowanego zestawu.
  • początek: Wartość początkowa zapytania zakresu. Może to być wynik, ranga lub wartość leksykograficzna.
  • koniec: Wartość zamknięcia zapytania zakresu. Może to być wynik, ranga lub wartość leksykograficzna.

Powyższe argumenty są obowiązkowe dla tego polecenia, a niektóre opcjonalne argumenty można określić w następujący sposób.

  • BYSCORE: Zakres (argumenty startowe i końcowe) jest określone na podstawie wyników.
  • Bylex: Zakres jest określony na podstawie wartości leksykograficznych.
  • OBRÓT SILNIKA: Ten argument odwróci kolejność zwróconych członków, w której 0. indeks będzie utrzymywał członka z najwyższym wynikiem.
  • LIMIT: Ten argument ograniczy liczbę zwróconych członków z danego przesunięcia.
  • Zscores: Domyślnie polecenie Zrange zwraca elementy tylko w danym przedziale zasięgu. Po określaniu tego argumentu wyjście zawiera również wartości wynikowe powiązane z każdym elementem.

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.