Se hai attivato la funzionalità di memoria virtuale (EDIT:ora deprecato ), quindi Redis inizia a memorizzare i dati "usati raramente" su disco quando la memoria si esaurisce.
Se la memoria virtuale in Redis è disabilitata (impostazione predefinita) e maxmemory
parametro è impostato (impostazione predefinita), Redis non utilizzerà più memoria di maxmemory
consente. Se giri maxmemory
disattivato, Redis inizierà a utilizzare la memoria virtuale (ovvero lo scambio) e le prestazioni diminuiranno enormemente.
Le versioni più recenti di Redis hanno vari criteri quando maxmemory
è raggiunto:
volatile-lru
- rimuovere una chiave tra quelle con un set di scadenza, provando a rimuovere le chiavi non utilizzate di recente.volatile-ttl
- rimuovere una chiave tra quelle con scadenza impostata, provando a rimuovere le chiavi con poco tempo rimanente per vivere.volatile-random
- rimuovi la chiave casuale tra quelle con una scadenza impostata.allkeys-lru
- comevolatile-lru
, ma rimuoverà ogni tipo di chiave, sia chiavi normali che chiavi con un set scaduto.allkeys-random
-comevolatile-random
, ma rimuoverà ogni tipo di chiave, sia chiavi normali che chiavi con un set scaduto.
Se scegli una politica che rimuove solo le chiavi con un set EXPIRE, quando Redis esaurisce la memoria, sembra che il programma interrompa l'operazione malloc(). Cioè, se provi a memorizzare più dati, l'operazione di scrittura semplicemente fallisce.
Alcuni link per maggiori informazioni:
- http://antirez.com/post/redis-as-LRU-cache.html
- http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/