sql >> Databasteknik >  >> NoSQL >> Redis

Redis — bästa sättet att lagra en stor karta (ordbok)

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:

  1. 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.
  2. Håll HSET-storleken mindre än hash-max-zipmap-entries och giltigt hash-max-zipmap-value om minnet är huvudmålet. Se till att du förstår vilka hash-max-zipmap-entries och hash-max-zipmap-value betyda. Ta också lite tid att läsa om ziplist.
  3. 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 in hash-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.
  4. 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)



  1. Redis Mass Insertion

  2. MongoError:Kan inte extrahera geonycklar från objekt med Type :Point

  3. Hur aggregerar man efter datum när en fullständig tidsstämpel ges i aggregeringsramverket?

  4. Hur spelar ordningen på sammansatta index roll i MongoDB prestandamässigt?