Szczegóły na niskim poziomie strumieni Redis
Strumienie Redis to struktura danych tylko w dodatku, która zapewnia zestaw wysoce wydajnych operacji odczytu i wstawienia z efektywnym mechanizmem przechowywania pamięci. Wewnętrznie strumienie Redis używają struktury danych drzewa Radix, które jest drzewem zoptymalizowanym przestrzenią o wysokiej wydajności pamięci.
Streams Redis STREAMS przechowuj dane jako lista wpisów, w których każdy wpis składa się z par kluczowych. Na niskim poziomie wpisy te są pakowane w makro-nod, jak pokazano następujące.
W tym artykule skupiamy się na usuwaniu wpisów strumienia za pomocą polecenia Xtrim, a wyżej wymieniona koncepcja jest ściśle wpływa na wydajność operacji usuwania. Zwykle usuwanie wprowadzania strumienia Redis jest bardzo wydajne, jeśli jest wykonywane na poziomie węzłów makro, ale nie na poziomie podstawowym. Mechanizm ten jest zaimplementowany za pomocą polecenia Xtrim, które będziemy omawiać w następnym rozdziale.
Polecenie Xtrim
Polecenie Xtrim służy do odcięcia wpisów strumienia na podstawie danej wartości progowej. Próg może być maksymalną liczbą wpisów na strumień lub starszy identyfikator wpisu. Polecenie xtrim akceptuje rodzaj progu jako argument poleceń. Składnia polecenia Xtrim jest następująca.
Xtrim Stream_Key Maxlen | Minid [= | ~] próg_value [limit]
Stream_key: Klucz strumienia Redis.
Maxlen: Maksymalna długość strumienia po przycinaniu wpisów. Wszystkie wpisy zostaną usunięte, które przekraczają długość strumienia, co jest określone przez wartość progową. Ten argument jest pozytywną liczbą całkowitą.
Minid: Minimalny identyfikator strumienia, który powinien pozostać po przycinaniu wpisów. Wszystkie wpisy zostaną usunięte, które mają identyfikatory niższe niż określony próg. Za każdym razem, gdy określasz ten parametr, próg staje się identyfikatorem strumienia.
= Operator: Po określaniu dokładne przycinanie zostanie wykonane na podstawie wartości progowej.
~ Operator: Po określaniu, prawie dokładne przycinanie zostanie wykonane na podstawie wartości progowej i wielkości węzłów makro.
Wartość progowa: Wartość progowa na podstawie argumentu maxlen lub minid.
Liczba limitu: Maksymalna liczba wpisów do usunięcia.
Przypadek użycia 01 - Usuwanie wpisów strumienia na podstawie maksymalnej długości
Załóżmy, że firma turystyczna utrzymuje sklep Redis, aby śledzić informacje o turystyce. Struktura danych Redis Streams została wykorzystana do przechowywania informacji każdego turysty jako pary wartości kluczowej. Z czasem strumień się rozwijał i planują zachować tylko najnowsze 1000 wpisów. Zidentyfikowali więc maksymalną długość strumienia w dowolnym momencie. Polecenie Xtrim zostało użyte do osiągnięcia tego.
Dla celów demonstracyjnych najpierw utworzymy strumień z 10 wpisami w następujący sposób. Komenda XADD została użyta do wykonania wstawienia.
Xadd Touristinfo * Nazwa Jack Country Włochy Familymems 5
Xadd Touristinfo * Nazwa Harry Country USA Familymems 2
Xadd Touristinfo * Nazwa Nikomita Country Japan Familymems 3
Xadd Touristinfo * Nazwa Zakaria Country India Familymems 2
Xadd Touristinfo * Nazwa Redmond Country Brazil Familymems 6
Xadd Touristinfo * Nazwa Nakita Country Japan Familymems 3
Xadd Touristinfo * Imię Maryjohn Country USA Familymems 2
Xadd Touristinfo * Nazwa Liza Country Włochy Familymems 5
Xadd Touristinfo * Nazwa Nimshikaa Country Japan Familymems 3
Xadd Touristinfo * Nazwa Nisha Country Włochy Familymems 5
Użyjmy polecenia Xrange, aby sprawdzić strumień Touristinfo w następujący sposób.
Xrange Touristinfo - +
Wyjście:
Zgodnie z oczekiwaniami, 10 wpisów strumieniowych zostało wyświetlonych przez to polecenie.
Do celów demonstracyjnych będziemy przycinać strumień, w którym jego maksymalna długość wynosiła 5.
Xtrim Touristinfo Maxlen 5
Sprawdźmy ponownie wpisy strumienia za pomocą polecenia Xrange.
Zgodnie z oczekiwaniami, pięć wpisów zostało eksmitowanych ze strumienia, a jego długość wynosi 5.
Przypadek użycia 02 - Usuwanie wpisów strumieniowych na podstawie identyfikatorów strumienia
Weźmy przykład, w którym firma pogodowa śledzi informacje o pogodzie danej lokalizacji za pomocą strumieni Redis. Teraz chcą usunąć starsze wpisy, które nie są już potrzebne. Możemy użyć polecenia Xtrim za pomocą strategii minidowej, jak pokazano następujące.
Najpierw stworzymy strumień o nazwie WeatherInfo i dodamy do niego 5 wpisów w następujący sposób.
xadd Weatherinfo * Temp 10 wilgotność 50
xadd Weatherinfo * Temp 20 wilgotność 70
xadd Weatherinfo * Temp 12 wilgotność 65
Xadd Weatherinfo * Temp 15 wilgotność 88
Xadd Weatherinfo * Temp 18 wilgotność 45
Wyjście:
Użyjmy polecenia Xtrim, aby usunąć wpisy, które mają identyfikatory niższe niż określona wartość progowa.
Xtrim Weatherinfo minid 1660485503248-0
Minimalny określony identyfikator jest powiązany z trzecim wpisem. Stąd wpisy po trzecim wpisie, które mają niższe identyfikatory, zostaną usunięte.
Wyjście:
Ponieważ nie określiliśmy wyraźnie argumentów = lub ~. Stąd dokładne przycinanie zostało wykonane w obu przypadkach użycia. Jeśli wyraźnie określiłeś operatora ~, prawie dokładne przycinanie zostanie wykonane, jak pokazano następujące.
Jak pokazano na powyższym rysunku, polecenie Xtrim zostało użyte z operatorem ~. Prosimy polecenie o usunięcie wszystkich wpisów przekraczających długość 100. Ponieważ nie zmuszamy polecenia Xtrim do dokładnego przycinania, skupi się ono na wydajności operacji przycinania. Tak więc nie usunie bezpośrednich wpisów, które należą do tego samego węzła makro. Zachowa kolejne trzy wpisy, które znajdują się w tym samym węźle makro i usunie wszystkie makro-nod po tych. Daje znaczną poprawę wydajności niż w dokładnym podejściu do przycinania, co zmusza polecenie do włożenia dodatkowego wysiłku. Ta sama procedura ma miejsce, gdy próg jest oparty na identyfikatorach wpisu.
Argument limitu ogranicza liczbę eksmitowanych wpisów z określonego strumienia, które można wykorzystać do uzyskania nieco większej poprawy wydajności.
Wniosek
Krótko mówiąc, polecenie Xtrim służy do usuwania wpisów strumienia na podstawie wartości progowej. Rodzaj wartości progowej można zmienić z kontekstem określonym za pomocą argumentów poleceń Maxlena i Minid. Jak omówiono, przycinanie można wykonać na dwa sposoby, w których operacja przycinania będzie uważać próg za dokładny lub przybliżony limit. Domyślnie polecenie używa operatora = używanego do dokładnego przycinania. Z operatorem ~ możesz wykonać przybliżone przycinanie, jak wspomniano w powyższej sekcji. Ogólnie rzecz biorąc, przybliżone podejście do przycinania i argument limitu pomagają uzyskać znaczny wzrost wydajności dzięki poleceniu Xtrim.