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?
122
Respostas:
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.
fonte
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:
BGSAVE
comandoMas os dados no redis não são realmente persistentes, porque:
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 .
fonte
É 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:
fonte
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 é:
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 :
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.
fonte
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.
fonte