Sim, como diz Itamar Haber, você deve dar uma olhada neste guia de otimização de memória redis. Mas você também deve ter em mente mais algumas coisas:
- Prefira HSET a KEYS. O Redis consome muita memória apenas no gerenciamento de espaço de chave. Em termos simples (e aproximados), 1 HSET com 1.000.000 chaves consome até 10x menos memória do que 1.000.000 chaves com um valor cada.
- Mantenha o tamanho HSET menor que
hash-max-zipmap-entries
ehash-max-zipmap-value
válido se a memória for o alvo principal. Certifique-se de entender o quehash-max-zipmap-entries
ehash-max-zipmap-value
quer dizer. Além disso, reserve um tempo para ler sobre a lista zip. - Na verdade, você não quer lidar com
hash-max-zipmap-entries
com 10M+ teclas; em vez disso, você deve dividir um HSET em vários slots. Por exemplo, você definehash-max-zipmap-entries
como 10.000. Portanto, para armazenar mais de 10 milhões de chaves, você precisa de mais de 1.000 chaves HSET com 10.000 cada. Como regra geral:crc32(key) % maxHsets. - Leia sobre strings em redis e use um comprimento de nome KEY (em HSET) baseado no gerenciamento de memória real para essa estrutura. Em termos simples, mantendo o comprimento da chave abaixo de 7 bytes, você gasta 16 bytes por chave, mas uma chave de 8 bytes gasta 48 bytes cada. Por quê? Leia sobre strings dinâmicas simples.
Pode ser útil ler sobre:
- Otimização de memória Redis (de sripathikrishnan)
- Comentários sobre a estrutura interna da lista zip.
- Armazenando centenas de milhões de pares de valores-chave simples no Redis (Instagram)