Да, както казва Итамар Хабер, трябва да погледнете това ръководство за оптимизация на паметта на 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)