Iterować członków sortowanego zestawu
Jak wszyscy wiecie, zestawy sortowane w Redis pochodzą z regularnych zestawów, w których każdy członek jest uporządkowany przez wartość wyniku w kolejności rosnącej. Jeśli dwóch lub więcej członków ma tę samą wartość wyniku, są one zamówione według kolejności leksykograficznej. Zwykle członkowie i wyniki mogą być bezpośrednio pobrane za pomocą polecenia Zrange. Kiedy masz duży zestaw posortowany z tysiącami członków, polecenie Zrange może blokować serwer przez długi czas. Tak więc Redis oferuje specjalne polecenie o nazwie Zscan, które pochodzi od komendy skanowania, aby iterować członków sortowanego zestawu. Ponieważ polecenie ZSCAN dziedziczy po poleceniu skanowania, prawie wszystkie zachowania są takie same jak polecenie skanowania ogólnego celu.
Jak na danej figurze, polecenie skanowania jest iteratorem opartym na kursorze. Stąd potrzeba jednej lub więcej iteracji, aby dostarczyć wszystkie elementy kolekcji Redis. Ponieważ polecenie ZSCAN dziedziczy po poleceniu skanowania nadrzędnego, zachowanie jest takie samo. W tym przewodniku składnia i przypadki użycia polecenia ZSCAN zostaną szczegółowo omówione.
Polecenie ZSCAN
Polecenie ZSCAN to iterator oparty na kursorze, który rozpoczyna iterację z kursorem 0. Następnie, w każdej iteracji, zwraca zero lub bardziej posortowane elementy zestawu wraz z następnym kursorem, który powinien być używany jako kursor dla następującego wywołania poleceń. Jeśli zwrócony kursor wynosi 0 po jednej lub więcej iteracjach, oznacza to, że proces skanowania się skończył. W tym momencie wszyscy posortowani członkowie są zwracani. Proces ten nazywa się pełną iteracją. Jak widać, polecenie ZSCAN utrzymuje swój stan tylko za pomocą kursora, który prowadzi do ograniczonej świadomości państwa. Dlatego następujące wady są powiązane z poleceniem ZSCAN.
Ponadto nie ma gwarancji liczby zwróconych członków. W niektórych przypadkach, jeśli sortowany zestaw jest bardzo mały, wszyscy członkowie mogą zostać zwrócone w pierwszej iteracji. Ponieważ Redis używa specjalnego formatu kodowania z jedną alokacją do przechowywania członków do momentu osiągnięcia maksymalnej liczby przedmiotów. Polecenie ZSCAN jest w stanie zwrócić kursor tylko wtedy, gdy zeskanowana struktura danych jest reprezentowana jako tabela skrótu.
Składnia:
Polecenie ZSCAN używa prawie tej samej składni co polecenie skanowania, z tym wyjątkiem, że akceptuje posortowany klucz zestaw jako pierwszy argument. Składnia polecenia z dozwolonymi argumentami jest następująca:
ZSCAN sorted_set_key kursor [wzór meczu] [Count Member_count]
sorted_set_key: Klucz posortowanego zestawu.
Kursor: Wartość kursora zaczyna się od 0, a kończy na 0, jeśli jest to pełna iteracja.
Następujące argumenty są opcjonalne:
MECZ: Wzór dopasowany podczas pobierania elementów w każdej iteracji. Zwracane są tylko dopasowani członkowie.
LICZYĆ: Przybliżona liczba członków, które zostaną zwrócone w każdej iteracji.
Zwrócony zestaw wyników na iterację zawiera kilka elementów. Pierwsza część to 64-bitowa liczba całkowita, która reprezentuje kursor, który ma zostać przekazany do następnego połączenia. Następna część to szereg członków i powiązane wyniki.
Przypadek użycia 1 - odzyskaj wszystkich członków i ich zakończone misje gry online
Załóżmy, że firma gier online utrzymuje tablicę liderów za pomocą zestawu sortowanego Redis. Ponieważ masywni użytkownicy aktywnie grają w grę, potrzebują sposobu na odzyskanie każdego gracza i powiązanego wyniku, który jest liczbą ukończonych misji. Konieczność wykonania pobierania bez blokowania serwera. Tak więc zaleceniem jest użycie polecenia ZSCAN w następujący sposób:
Najpierw tworzymy sortowany zestaw z niektórymi graczami i wypełnioną liczbę misji.
Zadd Leaderboard Tablica 12 Player6: John 4 Player2: Mary 22 Player1: Patel 15 Player: 11 23 Player5: Ann 30 Player7: Surph 23 Player12: Abby 2 Player13: Nicky 6 Player9: Jeremy 7 Player45: Kina: Kina: Kina: Kina
Teraz możemy iterować członków sortowanego zestawu w następujący sposób:
tablica liderów ZSCAN 0
Wyjście:
Wartość kursora wynosi 0 w zwróconym zestawie wyników, co oznacza, że wszyscy członkowie są zwracani na końcu pierwszej iteracji. W takim przypadku, ponieważ liczba członków jest niewielka, Redis reprezentuje te elementy przy użyciu kodowania z pakowanym pojedynczym alokacją. Dlatego do momentu osiągnięcia maksymalnej wielkości opakowania lub liczby członków polecenie zwraca wszystkich członków w sortowanym zestawie. Nazywa się to pełną iteracją. Ponieważ pod koniec pierwszej iteracji otrzymujemy wszystkich dziesięciu członków i ich wyniki. Jeśli mamy setki członków, jest on reprezentowany jako tabela skrótu w pamięci. Zwrócenie wszystkich członków wymaga kilku iteracji.
Parametr liczby można użyć do ograniczenia liczby członków zwróconych w iteracji. Domyślnie ten argument jest ustawiony na 10. Jeśli sortowany zestaw składa się z setek członków, jest reprezentowany przez tabelę skrótów w pamięci. Tak więc liczba zwróconych członków wynosi około dziesięciu na iterację. Wartość argumentu liczby jest ignorowana, jeśli sortowany zestaw jest zbyt mały.
Przypadek użycia 2 - Przyprzyj graczom, których nazwa zaczyna się od litery „J”
Polecenie ZSCAN może być używane do odfiltrowania zwróconych elementów na podstawie dopasowania wzoru. W takim przypadku należy określić argument dopasowania.
Użyjmy tego samego przykładu z poprzedniego przypadku użycia. Wymagane jest pobieranie graczy, których nazwa zaczyna się od litery „J”. Ma to tylko na wdrożenie kolejnej fajnej funkcji związanej z grą. Argument dopasowania można określić w następujący sposób:
Zscan Leaderboard 0 Match *J *
Powinno to idealnie zwrócić dwóch członków, których nazwiska to Jeremy i John.
Wniosek
Podsumowując, polecenie ZSCAN służy do iterowania członków i wyników zestawu sortowanego przez Redis. To polecenie zachowuje się tak samo jak polecenie skanowania, z wyjątkiem tego, że polecenie ZSCAN akceptuje klucz SET jako pierwszy argument. Jak omówiono w przypadkach użycia, polecenie ZSCAN może być używane na różne sposoby, określając argumenty dopasowania i zliczania, w których można odzyskać członków i powiązane wyniki, które pasują do określonego wzorca i ograniczają zwróconą liczbę członków na iterację. Ogólnie rzecz biorąc, polecenie ZSCAN może być przydatne podczas pobierania członków sortowanego zestawu bez blokowania serwera lub klienta.