sql >> Base de Datos >  >> NoSQL >> Redis

¿Qué hace Redis cuando se queda sin memoria?

Si tiene activada la función de memoria virtual (EDIT:ahora en desuso ), luego Redis comienza a almacenar los datos "no tan frecuentemente usados" en el disco cuando se agota la memoria.

Si la memoria virtual en Redis está deshabilitada (valor predeterminado) y maxmemory está establecido (el valor predeterminado), Redis no usará más memoria que maxmemory permite. Si activa maxmemory apagado, Redis comenzará a usar memoria virtual (es decir, intercambio) y el rendimiento se reducirá enormemente.

Las versiones más recientes de Redis tienen varias políticas cuando maxmemory se alcanza:

  • volatile-lru - elimine una clave entre las que tienen un conjunto caducado, intentando eliminar las claves que no se usaron recientemente.
  • volatile-ttl - elimine una clave entre las que tienen un conjunto de caducidad, tratando de eliminar las claves con poco tiempo de vida restante.
  • volatile-random - elimine una clave aleatoria entre las que tienen un conjunto de caducidad.
  • allkeys-lru - como volatile-lru , pero eliminará todo tipo de clave, tanto claves normales como claves con un conjunto de caducidad.
  • allkeys-random -como volatile-random , pero eliminará todo tipo de claves, tanto las claves normales como las claves con un conjunto de caducidad.

Si elige una política que solo elimina claves con un conjunto EXPIRE, entonces cuando Redis se queda sin memoria, parece que el programa simplemente aborta la operación malloc(). Es decir, si intenta almacenar más datos, la operación de escritura simplemente falla.

Algunos enlaces para más información:

  • http://antirez.com/post/redis-as-LRU-cache.html
  • http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/