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

O que o Redis faz quando fica sem memória?


Se você tiver a funcionalidade de memória virtual ativada (EDIT:agora obsoleta ), o Redis começará a armazenar os dados "não usados ​​com tanta frequência" no disco quando a memória acabar.

Se a memória virtual no Redis estiver desabilitada (o padrão) e o maxmemory estiver definido (o padrão), o Redis não usará mais memória do que maxmemory permite. Se você ativar maxmemory desligado, o Redis começará a usar memória virtual (ou seja, swap) e o desempenho cairá tremendamente.

As versões mais recentes do Redis têm várias políticas quando maxmemory é atingido:
  • volatile-lru - remover uma chave entre aquelas com data de expiração, tentando remover chaves não usadas recentemente.
  • volatile-ttl - remova uma chave entre aquelas com um conjunto de expiração, tentando remover chaves com pouco tempo restante de vida.
  • volatile-random - remova a chave aleatória entre aquelas com um conjunto de expiração.
  • allkeys-lru - likevolatile-lru , mas removerá todos os tipos de chave, tanto chaves normais quanto chaves com um conjunto de expiração.
  • allkeys-random -like volatile-random , mas removerá todos os tipos de chaves, tanto chaves normais quanto chaves com um conjunto de expiração.

Se você escolher uma política que remove apenas chaves com um conjunto EXPIRE, quando o Redis ficar sem memória, parecerá que o programa apenas aborta a operação malloc(). Ou seja, se você tentar armazenar mais dados, a operação de gravação simplesmente falhará.

Alguns links para mais informações:
  • http://antirez.com/post/redis-as-LRU-cache.html
  • http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/