Redis to magazyn danych w pamięci, co oznacza, że cały zestaw danych jest przechowywany w pamięci (RAM). Chociaż jest to świetne dla wydajności, gdy rozmiar danych zaczyna rosnąć, coraz więcej pamięci RAM należy dodawać, aby przechowywać wszystkie te dane. Może to szybko stać się zbyt drogie i zanim się zorientujesz, koszty serwerów zaczną gwałtownie rosnąć, co sprawia, że martwisz się, czy Redis może skalować się dla Ciebie w opłacalny sposób.
Jest to oczywiście powszechny problem z każdą bazą danych, ale bardziej boli w przypadku baz danych w pamięci, takich jak Redis, ponieważ pamięć RAM jest droższa niż pamięć dodatkowa, taka jak dyski twarde i dyski SSD. Musimy jednak pamiętać, że Redis nie jest przeznaczony do przechowywania terabajtów danych dla Twojej aplikacji. Jest raczej przeznaczony do przechowywania danych, które muszą być odczytywane (iw mniejszym stopniu zapisywane) z bardzo dużą szybkością, podczas gdy reszta danych może znajdować się w tradycyjnych bazach danych opartych na dyskach. W tym celu Redis jest najczęściej używany jako pamięć podręczna, przechowująca tylko najbardziej aktywne dane o wysokich wymaganiach dotyczących przepustowości odczytu/zapisu (pomyśl o tablicach wyników i wiadomościach na czacie w czasie rzeczywistym). Dlatego głównym winowajcą nadmiernego wykorzystania pamięci w Redis jest zachowanie aplikacji. Twoja aplikacja może przechowywać niepotrzebne dane, które nie odnoszą korzyści z przebywania w Redis, lub nawet całkowicie nadmiarowe dane, tj. dane, które nigdy nie były używane w żadnym celu, tak jak ten użytkownik.
Aby zdiagnozować problemy z nadmiernym zużyciem pamięci, oczywiście potrzebujemy sposobu, aby dowiedzieć się, które klucze zużywają najwięcej pamięci, abyśmy mogli zacząć wnioskować i zrozumieć, jakie zachowania aplikacji powodują problem. Pamiętaj, przedwczesna optymalizacja jest źródłem wszelkiego zła, a Redis nie jest wyjątkiem. Bezwzględnie potrzebujemy wglądu w charakterystykę pamięci naszego zestawu danych, aby nawet zacząć myśleć o tym, gdzie leży problem i jak możemy go naprawić. Poniżej analizujemy niektóre z dostępnych opcji, aby zajrzeć do naszych danych Redis i znaleźć te obszary, które mogą skorzystać na optymalizacji na poziomie aplikacji.
Polecenie UŻYCIE PAMIĘCI
To trafnie nazwane polecenie jest dostępne od wersji Redis 4.0.0 i jest pierwszym krokiem do debugowania problemów z pamięcią w Redis. Z dokumentów:
Polecenie MEMORY USAGE podaje liczbę bajtów, które klucz i jego wartość muszą być przechowywane w pamięci RAM. Raportowane użycie to suma alokacji pamięci dla danych i kosztów administracyjnych wymaganych przez klucz, którego wartość wymaga.
Oto przykład:
MEMORY USAGE users_by_reputation
(integer) 2923419
Zwracana jest prosta liczba całkowita reprezentująca liczbę bajtów używanych do przechowywania klucza, wartości i wewnętrznych kosztów ogólnych. Aby szybko znaleźć użycie pamięci przez konkretny klucz, nie jest to prostsze.
Dwie możliwe wady to:
- To polecenie jest dostępne tylko w wersji Redis 4.0.0 i nowszych. Wyklucza to większość dostawców usług w chmurze.
- Informuje tylko o pamięci używanej przez pojedynczy klawisz, więc jeśli nie wiesz z góry, który klawisz lub klawisze powodują problem, to polecenie ma bardzo ograniczoną użyteczność.
redis-rdb-tools
redis-rdb-tools to sprytne, małe narzędzie wiersza poleceń, które wykracza poza skromne MEMORY USAGE
polecenie, które omówiliśmy powyżej. Jest to popularne i potężne narzędzie do profilowania pamięci stworzone specjalnie dla Redis, które analizuje plik zrzutu Redis (.rdb) i generuje szczegółowy profil pamięci dla każdego klucza w zrzucie, w tym szczegóły, takie jak używana pamięć, typ danych, liczba elementów, itp. Pozwala także filtrować klucze, które są przetwarzane, dzięki czemu można opcjonalnie uruchomić analizę na konkretnym kluczu lub podzbiorze kluczy, które pasują do określonego wzorca. Wynikiem analizy jest plik CSV z kolumnami na klucz, używaną pamięć, typ danych, liczbę elementów itp.
To narzędzie jest tak świetne, ponieważ w przeciwieństwie do MEMORY USAGE
polecenie, które działa tylko na jednym klawiszu, to narzędzie analizuje cały zestaw danych i wypluwa wynik w formacie CSV, co oznacza, że możesz załadować go do dowolnej bazy danych SQL i wykonać dowolne zapytania, sortując je i filtrując według własnego uznania , z całą mocą SQL, która zapewnia doskonały wgląd w koszt pamięci Twoich danych. Jako bonus, jeśli używasz wersji Redis wcześniejszych niż 4.0.0, możesz nadal używać tego narzędzia do analizowania pojedynczych kluczy, jeśli chcesz, ponieważ to narzędzie działa poprzez analizowanie zrzutu binarnego, który tworzy Redis, zamiast polegać na Redis do zgłoś użycie pamięci. Z drugiej strony ta różnica w podejściu oznacza, że obliczone zużycie pamięci jest bardziej szacunkiem niż dokładną liczbą, jak wspomniano w dokumentacji projektu. Nie stanowi to jednak problemu, gdy naszym celem jest identyfikacja problemów z wykorzystaniem pamięci, ponieważ bardziej interesują nas względne rozmiary kluczy i identyfikowanie kluczy, które zużywają znacznie więcej pamięci niż powinny, więc kilka bajtów tu czy tam jest naprawdę nieistotne.
RDBTools
RDBTools to narzędzie internetowe, które oferuje kilka narzędzi do zarządzania i optymalizacji Redis, z głównym naciskiem na optymalizację pamięci. Narodził się z projektu redis-rdb-tools o otwartym kodzie źródłowym omówionego powyżej. Dzięki niemu możemy bez wysiłku analizować wykorzystanie pamięci naszego serwera Redis, po prostu wskazując na naszą instancję i klikając „Analizuj”. Narzędzie pobiera zrzut z uruchomionej instancji i analizuje go, prezentując zgrabny interfejs użytkownika do filtrowania i sortowania kluczy na podstawie różnych parametrów, takich jak zużycie pamięci, typ danych, kodowanie, liczba elementów itp., podobnie jak w wierszu poleceń narzędzie, ale bez żadnego ręcznego wysiłku związanego z robieniem zrzutu, generowaniem profilu pamięci, konfigurowaniem bazy danych, importowaniem profilu, pisaniem i uruchamianiem zapytań itp.
Poza tym RDBTools generuje również kilka wykresów i wykresów z profilu pamięci, umożliwiając jeszcze lepszy wgląd w dane, wraz z zaleceniami dotyczącymi optymalizacji konfiguracji serwera Redis, w oparciu o standardy branżowe i wieloletnie doświadczenie w optymalizacji Redis, aby wycisnąć jeszcze więcej oszczędności pamięci. Oprócz optymalizacji pamięci istnieje wiele innych funkcji przydatnych dla każdego, kto używa Redis, takich jak wbudowany bogaty CLI, edytor konfiguracji z dokumentacją wbudowaną, bogaty wizualizator danych na żywo itp.
RDBTools jest dostępny jako obraz dokera, dostępny w centrum dokowania i może być uruchamiany na własnym komputerze, więc nie musisz się martwić o wyciek poufnych danych. Wersja próbna jest dostępna za darmo na zawsze, z pewnymi ograniczeniami użytkowania. Zobacz stronę z cenami, aby uzyskać więcej informacji na temat różnych dostępnych płatnych planów.
Wniosek
Brak pamięci jest nieuniknionym problemem podczas korzystania z baz danych w pamięci, takich jak Redis. Podobnie jak w przypadku wszystkich problemów optymalizacyjnych, pierwszym krokiem jest prawidłowe zdiagnozowanie problemu. Ważne jest, aby oprzeć się pokusie szybkiego wyciągania wniosków na podstawie niezweryfikowanych hipotez. „Zmierz, zmierz, zmierz” to nazwa gry, jeśli chodzi o optymalizację, a istnieją różne metody i narzędzia pozwalające uzyskać wgląd w problemy z pamięcią Redis. Który z nich jest najlepszy, zależy od Twoich konkretnych potrzeb i miejsca, w którym jesteś w procesie rozwoju. Dla kogoś, kto dopiero zaczyna używać Redis, wystarczy mieć oko na poszczególne klawisze, podczas gdy dla ciężkich użytkowników Redis z pewnością sensowne jest skorzystanie z dedykowanego narzędzia GUI ze wszystkimi dzwonkami i gwizdkami, aby później zaoszczędzić ból. Niezależnie od wyboru, zawsze pamiętaj, aby zrozumieć źródło problemu, zanim spróbujesz go rozwiązać, i pamiętaj, że jeśli masz problemy z pamięcią w Redis, prawdopodobnie używasz więcej pamięci, niż naprawdę potrzebujesz.