Ano, jak říká Itamar Haber, měli byste se podívat na tohoto průvodce optimalizací paměti redis. Ale měli byste mít také na paměti několik dalších věcí:
- Upřednostněte HSET před KEYS. Redis spotřebovává spoustu paměti pouze na správu klíčového prostoru. Jednoduše (a hrubě) řečeno, 1 HSET s 1 000 000 klíči spotřebuje až 10x méně paměti než 1 000 000 klíčů s jednou hodnotou.
- Udržujte velikost HSET menší než
hash-max-zipmap-entries
a platnouhash-max-zipmap-value
pokud je hlavním cílem paměť. Ujistěte se, že rozumítehash-max-zipmap-entries
ahash-max-zipmap-value
znamenat. Věnujte také chvíli přečtení o ziplistu. - Ve skutečnosti nechcete zpracovávat
hash-max-zipmap-entries
s 10M+ klíči; místo toho byste měli rozdělit jeden HSET do více slotů. Například nastavítehash-max-zipmap-entries
jako 10 000. Takže k uložení 10M+ klíčů potřebujete 1000+ klíčů HSET, každý po 10 000. Jako hrubé pravidlo:crc32(klíč) % maxHsets. - Přečtěte si o řetězcích v redis a použijte pro tuto strukturu délku názvu KEY (v HSET) založenou na skutečné správě paměti. Jednoduše řečeno, pokud udržíte délku klíče pod 7 bajtů, utratíte 16 bajtů na klíč, ale 8bajtový klíč spotřebuje každý 48 bajtů. Proč? Přečtěte si o jednoduchých dynamických řetězcích.
Může být užitečné přečíst si o:
- Optimalizace paměti Redis (od sripathikrishnan)
- Komentáře k vnitřní struktuře ziplistu.
- Ukládání stovek milionů jednoduchých párů klíč–hodnota v Redis (Instagram)