Sì, come dice Itamar Haber, dovresti guardare questa guida all'ottimizzazione della memoria redis. Ma dovresti anche tenere a mente alcune altre cose:
- Preferisci HSET a KEYS. Redis consuma molta memoria solo per la gestione dello spazio chiave. In parole povere (e approssimative), 1 HSET con 1.000.000 di chiavi consuma fino a 10 volte meno memoria di 1.000.000 di chiavi con un valore ciascuna.
- Mantieni la dimensione HSET inferiore a
hash-max-zipmap-entries
ehash-max-zipmap-value
valido se la memoria è l'obiettivo principale. Assicurati di capire qualihash-max-zipmap-entries
ehash-max-zipmap-value
significare. Inoltre, prenditi del tempo per leggere la ziplist. - In realtà non vuoi gestire
hash-max-zipmap-entries
con oltre 10 milioni di chiavi; invece, dovresti suddividere un HSET in più slot. Ad esempio, impostihash-max-zipmap-entries
come 10.000. Quindi per memorizzare oltre 10 milioni di chiavi sono necessarie oltre 1000 chiavi HSET con 10.000 ciascuna. Come regola pratica:crc32(key) % maxHsets. - Leggi le stringhe in redis e usa una lunghezza del nome KEY (in HSET) basata sulla gestione della memoria reale per questa struttura. In parole povere, mantenendo la lunghezza della chiave inferiore a 7 byte, si spendono 16 byte per chiave, ma una chiave da 8 byte spende 48 byte ciascuna. Come mai? Leggi le semplici stringhe dinamiche.
Può essere utile leggere su:
- Ottimizzazione della memoria Redis (da sripathikrishnan)
- Commenti sulla struttura interna della ziplist.
- Memorizzazione di centinaia di milioni di semplici coppie chiave-valore in Redis (Instagram)