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-entriesen geldigehash-max-zipmap-valueals geheugen het hoofddoel is. Zorg ervoor dat u begrijpt wathash-max-zipmap-entriesenhash-max-zipmap-valuegemeen. Neem ook even de tijd om over ziplist te lezen. - U wilt eigenlijk niet omgaan met
hash-max-zipmap-entriesmet 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)