Да, както казва Итамар Хабер, трябва да погледнете това ръководство за оптимизация на паметта на Redis. Но трябва да имате предвид още няколко неща:
- Предпочитайте HSET пред KEYS. Redis консумира много памет само за управление на ключово пространство. Казано с прости (и груби) термини, 1 HSET с 1 000 000 ключа консумира до 10 пъти по-малко памет от 1 000 000 ключа с по една стойност всеки.
- Запазете размера на HSET по-малък от
hash-max-zipmap-entriesи валиднаhash-max-zipmap-valueако паметта е основната цел. Не забравяйте да разберете каквоhash-max-zipmap-entriesиhash-max-zipmap-valueозначава. Освен това отделете време, за да прочетете за ziplist. - Всъщност не искате да обработвате
hash-max-zipmap-entriesс 10M+ ключове; вместо това трябва да разбиете един HSET на множество слотове. Например задаватеhash-max-zipmap-entriesкато 10 000. Така че, за да съхранявате 10 милиона+ ключове, имате нужда от 1000+ HSET ключа с по 10 000 всеки. Като грубо правило:crc32(key) % maxHsets. - Прочетете за низовете в redis и използвайте дължина на KEY име (в HSET) въз основа на реално управление на паметта за тази структура. Казано по-просто, запазвайки дължината на ключа под 7 байта, вие изразходвате 16 байта на ключ, но 8-байтов ключ изразходва 48 байта всеки. Защо? Прочетете за простите динамични низове.
Може да е полезно да прочетете за:
- Оптимизация на паметта Redis (от sripathikrishnan)
- Коментари относно вътрешната структура на циплиста.
- Съхраняване на стотици милиони прости двойки ключ-стойност в Redis (Instagram)