Redis
 sql >> Database >  >> NoSQL >> Redis

Modo efficiente in termini di memoria per archiviare interi con segno a 32 bit in Redis

Internamente, Redis memorizza le stringhe nel modo più efficiente. Forzare numeri interi in stringhe radix 10 utilizzerà effettivamente più memoria.

Ecco come Redis memorizza le stringhe -

  1. Interi inferiori a 10000 sono archiviati in un pool di memoria condiviso e non hanno alcun sovraccarico di memoria. Se lo desideri, puoi aumentare questo limite modificando la costante REDIS_SHARED_INTEGERS in redis.h e ricompilando Redis.
  2. Interi maggiori di 10000 e nell'intervallo di un long consumano 8 byte.
  3. Le stringhe normali richiedono len(string) + 4 byte per la lunghezza + 4 byte per contrassegnare lo spazio libero + 1 byte per il terminatore null + 8 byte per i costi generali di malloc.

Nell'esempio che hai citato, è una domanda di 8 byte per un lungo v/s 21 byte per la stringa.

MODIFICA :

Quindi, se ho una serie di numeri tutti inferiori a 10.000, come fa Redis a memorizzare la mia serie?

Dipende da quanti elementi hai.

Se hai meno di 512 elementi nel tuo set (vedi set-max-intset-entries ), il set verrà archiviato come IntSet. Un IntSet è un nome glorificato per un array di interi ordinati. Poiché i tuoi numeri sono inferiori a 10000, utilizzerebbe 16 bit per elemento. È (quasi) efficiente in termini di memoria come un array C.

Se hai più di 512 elementi, il set diventa una HashTable. Ogni elemento del set è racchiuso in una struttura chiamata robj , che ha un sovraccarico di 16 byte. Il robj struttura ha un puntatore al pool condiviso di interi, quindi non si paga nulla in più per l'intero stesso. E infine, il robj le istanze sono archiviate nella tabella hash e la tabella hash ha un sovraccarico proporzionale alla dimensione del set.

Se sei interessato a quanta memoria esattamente consuma un elemento, esegui redis-rdb-tools sul tuo set di dati (disclaimer:sono l'autore di questo strumento). Oppure puoi leggere il codice sorgente per la classe MemoryCallback, i commenti spiegano come è strutturata la memoria.