Ja, som Itamar Haber säger, du bör titta på denna redis minnesoptimeringsguide. Men du bör också tänka på några fler saker:
- Föredrar HSET framför NYCKEL. Redis förbrukar mycket minne bara på nyckelutrymmeshantering. I enkla (och grova) termer förbrukar 1 HSET med 1 000 000 nycklar upp till 10 gånger mindre minne än 1 000 000 nycklar med ett värde vardera.
- Håll HSET-storleken mindre än
hash-max-zipmap-entries
och giltigthash-max-zipmap-value
om minnet är huvudmålet. Se till att du förstår vilkahash-max-zipmap-entries
ochhash-max-zipmap-value
betyda. Ta också lite tid att läsa om ziplist. - Du vill faktiskt inte hantera
hash-max-zipmap-entries
med 10M+ nycklar; istället bör du dela upp en HSET i flera platser. Till exempel ställer du inhash-max-zipmap-entries
som 10 000. Så för att lagra 10M+ nycklar behöver du 1000+ HSET-nycklar med 10 000 vardera. Som en grov tumregel:crc32(key) % maxHsets. - Läs om strängar i redis och använd ett KEY-namn (i HSET) längd baserat på verklig minneshantering för denna struktur. Enkelt uttryckt, om du håller nyckellängden under 7 byte, spenderar du 16 byte per nyckel, men en 8-byte nyckel spenderar 48 byte vardera. Varför? Läs om enkla dynamiska strängar.
Det kan vara användbart att läsa om:
- Redis minnesoptimering (från sripathikrishnan)
- Kommentarer om intern zipliststruktur.
- Lagra hundratals miljoner enkla nyckel-värdepar i Redis (Instagram)