Ja, zoals Itamar Haber zegt, je zou deze redis-gids voor geheugenoptimalisatie moeten bekijken. Maar je moet ook nog een paar dingen in gedachten houden:
- Geef de voorkeur aan HSET boven KEYS. Redis verbruikt veel geheugen alleen bij het beheer van de sleutelruimte. In eenvoudige (en grove) termen, verbruikt 1 HSET met 1.000.000 sleutels tot 10x minder geheugen dan 1.000.000 sleutels met elk één waarde.
- HSET-grootte kleiner houden dan
hash-max-zipmap-entries
en geldigehash-max-zipmap-value
als geheugen het hoofddoel is. Zorg ervoor dat u begrijpt wathash-max-zipmap-entries
enhash-max-zipmap-value
gemeen. Neem ook even de tijd om over ziplist te lezen. - U wilt eigenlijk niet omgaan met
hash-max-zipmap-entries
met 10M+ sleutels; in plaats daarvan moet u één HSET opsplitsen in meerdere slots. U stelt bijvoorbeeldhash-max-zipmap-entries
. in als 10.000. Dus om 10M+ sleutels op te slaan, hebt u 1000+ HSET-sleutels nodig met elk 10.000. Als grove vuistregel:crc32(key) % maxHsets. - Lees over strings in redis en gebruik een KEY-naam (in HSET) lengte op basis van echt geheugenbeheer voor deze structuur. In eenvoudige bewoordingen, als u de sleutellengte onder de 7 bytes houdt, besteedt u 16 bytes per sleutel, maar een sleutel van 8 bytes besteedt elk 48 bytes. Waarom? Lees meer over eenvoudige dynamische snaren.
Het kan nuttig zijn om te lezen over:
- Redis geheugenoptimalisatie (van sripathikrishnan)
- Opmerkingen over de interne ziplist-structuur.
- Honderden miljoenen eenvoudige sleutel-waardeparen opslaan in Redis (Instagram)