2012-11-06 11 views
12

In realtà, ho 3 istanze di Redis e le ho raggruppate in questo dump.rdb da 500 MB +. Il server Redis può leggere questo dump.rdb e sembra che tutto sia ok. Poi noto che redis-server costa più di 5.0 GB di memoria. Non so perché.Perché un file dump.rdb Redis da 500 MB richiede circa 5,0 GB di memoria?

C'è qualcosa di sbagliato nel mio file? Il mio db ha circa 3 milioni di chiavi, i valori per ogni chiave è una lista che contiene circa 80 numeri interi.

Io uso questo METHOD per mettere insieme 3 istanze.

PS: un altro dump.rdb con le stesse dimensioni e la stessa struttura dei valori-chiave costa solo 1 GB di memoria.

E i miei dati sono come keyNum -> {num1, num2, num3, ......}. Tutti i numeri sono compresi tra 1 e 4.000.000. Quindi dovrei usare List per memorizzarli? Per ora, io uso lpush (k, v). In questo modo è costato troppo?

risposta

0

Potrebbe esserci dell'altro, ma credo che Redis comprima i file di dump.

+0

Sì, comprime i dati. Da 500 MB a 5,0 GB, non posso avviare il mio programma ora :-( – wyp

15

Il rapporto tra la memoria e la dimensione del dump dipende dai tipi di dati utilizzati internamente da Redis.

Per oggetti di piccole dimensioni (hash, elenchi e set di ordinamento), redis utilizza elenchi di zip per codificare i dati. Per piccoli set di interi, redis utilizza Intsets. ZipList e IntSet sono memorizzati sul disco nello stesso formato in cui sono memorizzati nella memoria. Quindi, ti aspetteresti un rapporto 1: 1 se i tuoi dati utilizzano queste codifiche.

Per oggetti più grandi, la rappresentazione in memoria è completamente diversa dalla rappresentazione su disco. Il formato su disco è compresso, non ha puntatori, non ha a che fare con la frammentazione della memoria. Quindi, se i tuoi oggetti sono grandi, un rapporto memoria/disco 10: 1 è normale e previsto.

Se si desidera sapere quali oggetti occupano memoria, utilizzare redis-rdb-tools per profilare i propri dati. Da lì, segui lo memory optimization notes on redis.io, così come lo memory optimization wiki entry on redis-rdb-tools.

Problemi correlati