Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Maneira eficiente de memória para armazenar inteiros assinados de 32 bits no Redis


Internamente, o Redis armazena strings da maneira mais eficiente. Forçar inteiros em strings de raiz 10 usará mais memória.

Veja como o Redis armazena Strings -
  1. Inteiros menores que 10.000 são armazenados em um pool de memória compartilhada e não têm sobrecarga de memória. Se desejar, você pode aumentar esse limite alterando a constante REDIS_SHARED_INTEGERS em redis.he recompilando o Redis.
  2. Inteiros maiores que 10.000 e dentro do alcance de um longo consomem 8 bytes.
  3. Strings regulares levam len(string) + 4 bytes para comprimento + 4 bytes para marcação de espaço livre + 1 byte para terminador nulo + 8 bytes para overheads malloc.

No exemplo que você citou, é uma questão de 8 bytes para um longo v/s 21 bytes para a string.

EDITAR:

Então, se eu tiver um conjunto de números menor que 10.000, como o Redis armazena meu conjunto?

Depende de quantos elementos você tem.

Se você tiver menos de 512 elementos em seu conjunto (consulte set-max-intset-entries ), então o conjunto será armazenado como um IntSet. Um IntSet é um nome glorificado para um Sorted Integer Array. Como seus números são menores que 10.000, usaria 16 bits por elemento. É (quase) tão eficiente em termos de memória quanto um array C.

Se você tiver mais de 512 elementos, o conjunto se tornará uma HashTable. Cada elemento do conjunto é envolto em uma estrutura chamada robj , que tem uma sobrecarga de 16 bytes. O robj estrutura tem um ponteiro para o conjunto compartilhado de inteiros, então você não paga nada extra pelo próprio inteiro. E, finalmente, o robj instâncias são armazenadas na tabela de hash, e a tabela de hash tem uma sobrecarga proporcional ao tamanho do conjunto.

Se você estiver interessado em exatamente quanta memória um elemento consome, execute redis-rdb-tools em seu conjunto de dados (disclaimer:eu sou o autor desta ferramenta). Ou você pode ler o código-fonte da classe MemoryCallback, os comentários explicam como a memória é disposta.