Memoria RAM este cea mai prețioasă și scumpă resursă dintr-un cluster Redis. În producție, este frecvent întâlnită situația în care comanda INFO memory arată o discrepanță majoră între memoria efectiv ocupată de date (used_memory) și memoria alocată de sistemul de operare pentru procesul Redis (used_memory_rss). Raportul dintre cele două este mem_fragmentation_ratio.
Interpretarea Metricilor de Memorie din INFO memory
# Rulăm comanda de diagnostic:
INFO memory
# Parametri esențiali de urmărit:
# used_memory: 2147483648 (2.0 GB - datele efective)
# used_memory_rss: 4294967296 (4.0 GB - memoria solicitată de la Linux)
# mem_fragmentation_ratio: 2.00
# GHID DE INTERPRETARE PENTRU mem_fragmentation_ratio:
# 1.0 - 1.3: SĂNĂTOS. Fragmentare minimă normală a alocatorului Jemalloc.
# > 1.5: FRAGMENTARE CRITICĂ. Procesul ocupă mult mai mult RAM decât datele sale.
# Alocatorul păstrează pagini de memorie parțial goale returnate de chei șterse.
# < 1.0: PERICOL FATAL DE SWAP! Sistemul de operare mută memoria Redis pe disc (swap),
# ceea ce distruge complet performanța (latențele cresc de la microsecunde la secunde).
Defragmentarea Activă a Memoriei (Active Defragmentation)
Dacă folosiți alocatorul standard Jemalloc, Redis poate compacta memoria fragmentată în fundal, fără timpi de oprire și fără restart:
# Activarea defragmentării dinamice la cald:
CONFIG SET activedefrag yes
# Setarea pragului minim de fragmentare la care pornește procesul:
CONFIG SET active-defrag-ignore-bytes 100mb
CONFIG SET active-defrag-threshold-lower 10
Evoluția de la ziplist la listpack în Redis 7
| Caracteristică | Vechiul format ziplist |
Noul format listpack (Redis 7+) |
|---|---|---|
| Structură internă | Stochează lungimea intrării anterioare pentru parcurgere inversă. | Stochează doar lungimea intrării curente la sfârșitul fiecărui element. |
| Vulnerabilitate Cascading Updates | Dacă o valoare crește și trece de 254 de octeți, toate intrările următoare trebuie re-alocate în lanț ($O(N^2)$ blocaje). | Eliminat complet. Modificarea unui element nu afectează niciodată dimensiunea metadatelor elementelor vecine. |