Tak, jak mówi Itamar Haber, powinieneś zapoznać się z tym przewodnikiem optymalizacji pamięci redis. Należy jednak pamiętać o kilku innych rzeczach:
- Preferuj HSET niż KLUCZE. Redis zużywa dużo pamięci tylko na zarządzanie przestrzenią klucza. Mówiąc prosto (i zgrubnie), 1 HSET z 1 000 000 kluczy zużywa do 10 razy mniej pamięci niż 1 000 000 kluczy z jedną wartością każdy.
- Utrzymuj rozmiar HSET mniejszy niż
hash-max-zipmap-entries
i poprawnąhash-max-zipmap-value
jeśli głównym celem jest pamięć. Pamiętaj, aby zrozumieć, cohash-max-zipmap-entries
ihash-max-zipmap-value
oznaczać. Poświęć też trochę czasu na przeczytanie o liście zip. - Właściwie nie chcesz obsługiwać wpisów
hash-max-zipmap-entries
z ponad 10 milionami kluczy; zamiast tego powinieneś podzielić jeden HSET na wiele slotów. Na przykład ustawiaszhash-max-zipmap-entries
jako 10.000. Tak więc, aby przechowywać ponad 10 milionów kluczy, potrzebujesz ponad 1000 kluczy HSET, z których każdy ma 10 000. Jako ogólna zasada:crc32(key) % maxHsets. - Przeczytaj o ciągach w redis i użyj nazwy KEY (w HSET) w oparciu o rzeczywiste zarządzanie pamięcią dla tej struktury. Mówiąc prościej, utrzymując długość klucza poniżej 7 bajtów, wydajesz 16 bajtów na klucz, ale klucz 8-bajtowy zużywa 48 bajtów każdy. Czemu? Przeczytaj o prostych łańcuchach dynamicznych.
Warto przeczytać o:
- Optymalizacja pamięci Redis (z sripathikrishnan)
- Komentarze dotyczące wewnętrznej struktury listy zip.
- Przechowywanie setek milionów prostych par klucz-wartość w Redis (Instagram)