sql >> Databáze >  >> NoSQL >> Redis

Redis — nejlepší způsob, jak uložit velkou mapu (slovník)

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í:

  1. 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.
  2. Udržujte velikost HSET menší než hash-max-zipmap-entries a platnou hash-max-zipmap-value pokud je hlavním cílem paměť. Ujistěte se, že rozumíte hash-max-zipmap-entries a hash-max-zipmap-value znamenat. Věnujte také chvíli přečtení o ziplistu.
  3. 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íte hash-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.
  4. 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)



  1. Oznámení Redis Keyspace s flushdb

  2. Chyba MongoDB:Nelze použít opakovatelné zápisy s limitem=0

  3. Jak aktualizuji dokument Mongo po jeho vložení?

  4. Mongoose find() RegExp pro pole Typ čísla