O Redis mantém os dados?


122

Eu entendo que o Redis fornece todos os dados da memória, mas persiste também durante a reinicialização do servidor para que, quando o servidor for reinicializado, ele leia na memória todos os dados do disco. Ou é sempre um armazenamento em branco que serve apenas para armazenar dados enquanto os aplicativos estão sendo executados sem persistência?


1
Não tenho certeza se entendi sua pergunta corretamente. Você pode salvar o instantâneo no disco e ler esse arquivo; se não fizer isso, o banco de dados do Redis estará vazio ao reiniciar.
Sefa de

Respostas:


82

Eu sugiro que você leia sobre isso em http://redis.io/topics/persistence . Basicamente, você perde a persistência garantida ao aumentar o desempenho usando apenas o armazenamento na memória. Imagine um cenário em que você faz INSERÇÃO na memória, mas antes de persistir no disco, você perde energia. Haverá perda de dados.

O Redis oferece suporte aos chamados "instantâneos". Isso significa que ele fará uma cópia completa do que está na memória em alguns momentos (por exemplo, a cada hora inteira). Quando você perder energia entre dois instantâneos, perderá os dados do tempo entre o último instantâneo e o travamento (não precisa ser uma queda de energia ..). O Redis negocia a segurança dos dados com o desempenho, como a maioria dos NoSQL-DBs faz.

A maioria dos bancos de dados NoSQL segue um conceito de replicação entre vários nós para minimizar esse risco. O Redis é considerado mais um cache rápido do que um banco de dados que garante a consistência dos dados. Portanto, seus casos de uso normalmente diferem daqueles de bancos de dados reais: você pode, por exemplo, armazenar sessões, contadores de desempenho ou o que quer que seja com desempenho incomparável e sem perda real em caso de falha. Mas processar pedidos / históricos de compras e assim por diante é considerado uma tarefa para bancos de dados tradicionais.


1
Será ótimo se você puder adicionar o comportamento de persistência padrão. Como a resposta de @Leonid Beschastny.
yeya

40

O servidor Redis salva todos os seus dados no HDD de tempos em tempos, fornecendo assim algum nível de persistência.

Ele salva os dados em um dos seguintes casos:

  • automaticamente de vez em quando
  • quando você chama manualmente o BGSAVEcomando
  • quando o redis está fechando

Mas os dados no redis não são realmente persistentes, porque:

  • falha do processo redis significa perder todas as alterações desde o último salvamento
  • BGSAVE operação só pode ser realizada se você tiver RAM livre suficiente (a quantidade de RAM extra é igual ao tamanho do banco de dados redis)

NB: A BGSAVE exigência de RAM é um problema real, porque o redis continua a funcionar até que não haja mais RAM para executar, mas ele para de salvar dados no HDD muito antes (em aproximadamente 50% de RAM).

Para obter mais informações, consulte Persistência do Redis .


1
Desde que essa resposta foi escrita, o redis introduziu um modelo de persistência alternativo chamado AOF, que fornece persistência significativamente maior, mas tem algumas outras desvantagens, como maior utilização do disco e inicialização mais lenta do servidor.
Leonid Beschastny

15

É uma questão de configuração. Você pode ter persistência nenhuma, parcial ou total de seus dados no Redis. A melhor decisão será orientada pelas necessidades técnicas e comerciais do projeto.

De acordo com a documentação do Redis sobre persistência, você pode configurar sua instância para salvar dados no disco de vez em quando ou em cada consulta, em poucas palavras. Eles fornecem duas estratégias / métodos AOF e RDB (leia a documentação para ver os detalhes sobre eles), você pode usar cada um sozinho ou em conjunto.

Se você quer uma "persistência como SQL", eles disseram:

A indicação geral é que você deve usar os dois métodos de persistência se quiser um grau de segurança de dados comparável ao que o PostgreSQL pode fornecer.


7

A resposta geralmente é sim , no entanto, uma resposta mais completa realmente depende do tipo de dados que você está tentando armazenar. Em geral, a resposta curta mais completa é:

  • Redis não é a melhor opção para armazenamento persistente, pois se concentra principalmente no desempenho
  • O Redis é realmente mais adequado para armazenamento / cache confiável na memória de dados do estado atual , especialmente para permitir escalabilidade, fornecendo uma fonte central de dados usados ​​em vários clientes / servidores

Dito isso, por padrão, o Redis irá persistir os instantâneos de dados em um intervalo periódico (aparentemente isso ocorre a cada 1 minuto, mas eu não verifiquei isso - isso é descrito pelo artigo abaixo, que é uma boa introdução básica):

http://qnimate.com/redis-permanent-storage/


TL; DR

Dos documentos oficiais :

  • A persistência RDB [o padrão] realiza instantâneos point-in-time do seu conjunto de dados em intervalos especificados.
  • A persistência AOF [precisa ser explicitamente configurada] registra cada operação de gravação recebida pelo servidor, que será reproduzida novamente na inicialização do servidor, reconstruindo o conjunto de dados original.

O Redis deve ser explicitamente configurado para persistência AOF, se necessário, e isso resultará em uma penalidade de desempenho, bem como em logs de crescimento. Pode ser suficiente para uma persistência relativamente confiável de uma quantidade limitada de fluxo de dados.


5

Você pode escolher nenhuma persistência. Melhor desempenho, mas todos os dados perdem quando o Redis é encerrado.

O Redis tem dois mecanismos de persistência: RDB e AOF.RDB usa um agendador de snapshooting global e o AOF grava a atualização em um arquivo de log somente anexo semelhante ao MySql.

Você pode usar um deles ou ambos. Quando o Redis é reinicializado, ele cria dados a partir da leitura do arquivo RDB ou AOF.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.