Atualmente estou usando o MySql para armazenar minhas sessões. Funciona muito bem, mas é um pouco lento.
Pediram-me para usar o Redis, mas estou me perguntando se é uma boa ideia porque ouvi dizer que o Redis atrasa as operações de gravação. Estou com um pouco de medo porque as sessões precisam ser em tempo real.
Alguém já experimentou esses problemas?
Respostas:
O Redis é perfeito para armazenar sessões. Todas as operações são realizadas na memória e, portanto, as leituras e gravações serão rápidas.
O segundo aspecto é a persistência do estado da sessão. O Redis oferece bastante flexibilidade em como você deseja manter o estado da sessão no disco rígido. Você pode acessar http://redis.io/topics/persistence para saber mais, mas em um alto nível, aqui estão suas opções -
appendfsync always
em seu arquivo de configuração. Com isso, o Redis garante que todas as operações de gravação sejam salvas no disco. A desvantagem é que as operações de gravação serão mais lentas.appendfsync everysec
. Isso proporcionará um ótimo desempenho com garantias de dados razoáveisfonte
Basicamente, existem dois tipos principais disponíveis: snapsnots assíncronos e
fsync()
. Eles são chamados de RDB e AOF, respectivamente. Mais sobre modos de persistência na página oficial .O tratamento do sinal do processo daemonizado sincroniza com o disco quando ele recebe um SIGTERM, por exemplo, para que os dados ainda estejam lá após uma reinicialização. Acho que o daemon ou o sistema operacional precisa travar antes que você veja uma corrupção de integridade, mesmo com as configurações padrão (instantâneos RDB).
A configuração AOF usa um arquivo somente anexo que registra os comandos que o servidor recebe e recria o banco de dados desde o início na inicialização a frio, a partir do arquivo salvo. A política de sincronização de disco padrão é liberar uma vez a cada segundo (IIRC), mas pode ser definida para bloquear e gravar em cada comando.
Usar os instantâneos e o log incremental parece oferecer uma abordagem de longo prazo para não se importar se eu perder alguns segundos de dados com um log incremental mais seguro, mas caro. O Redis oferece suporte a clustering pronto para uso, portanto, ao que parece, a replicação também pode ser feita.
Estou usando a configuração de RDB padrão e salvando os instantâneos no FTP remoto. Ainda não vi uma falha que tenha causado perda de dados. Provavelmente, falha aguda de hardware ou falta de energia, mas estou hospedado em um VPS. Pouca chance de isso acontecer :)
fonte
Esta questão é realmente sobre sessões em tempo real e parece ter surgido em parte devido a um mal-entendido da frase 'operações de gravação atrasadas' Embora os detalhes tenham sido eventualmente revelados nos comentários, eu só queria deixar bem claro. ..
Você não terá problemas para implementar sessões em tempo real.
Redis é um armazenamento de valor-chave na memória com persistência opcional no disco. 'Operações de gravação atrasadas' referem-se a gravações no disco , não no banco de dados em geral, que existe na memória. Se você DEFINIR um par chave / valor, você pode obtê-lo imediatamente (ou seja, em tempo real). A política que você seleciona em relação à persistência (quanto você atrasa as gravações) determinará o limite superior de quantos dados podem ser perdidos em uma falha.
fonte