2
respostas

Armazenamento em REDIS

Olá, Supomos que tenho uma aplicação e nessa aplicação eu tenho um gráfico que mostra o ID do vendedor, o nome, e o valor total de suas vendas no dia.

Sendo assim, faço um hash para que seja armazenado no redis o ID, Nome e Valor da venda, e toda vez que o usuário realiza uma nova venda, o sistema pede para o REDIS incrementar o valor dessa venda para o vendedor respectivo.

Em algum determinado momento do dia, o servidor cai e é preciso reiniciar a máquina do servidor. Como o Guilherme explicou no curso, toda vez que reinicia o servidor do REDIS sua memória apaga e quando o servidor estiver online novamente todos os valores de vendas dos vendedores estarão zero e isso é um problema.

Gostaria de saber 2 casos. Primeiro: Ao realizar o incremento de valor de venda do vendedor no REDIS, eu deveria ter uma outra tabela em algum banco de dados que armazene as vendas de determinado dia para o vendedor?

Segundo: Toda vez que o servidor inicia, eu preciso popular as chaves do REDIS com as informações de cada vendedor e os valores de suas vendas?

Gostaria de saber se essa é a implementação correta, ou se existiria alguma forma mais limpa de armazenar essa informação, pois nesse caso terei de criar uma tabela nova para cada estatística que gostaria de trazer, e ao iniciar o sistema teria que popular essas informações no REDIS, o que não acho tão atrativo.

Talvez uma forma seria o próprio REDIS armazenar essas informações em DISCO, mas também não sei se isso é possível ou viável, o que vocês acham?

2 respostas

Rafael existe duas possibilidades uma é trabalhar com o redis no modo cluster onde aí você teria Sharks distribuídos caso uma máquina caia a outra assume e quando o outro servidor subir vai normalizar. E como garantia verificar primeiro no redis se existe o dado caso não vai em outro banco de sua preferência busca o estado atual e armazena no redis nas próximas consultas ele irá utilizar o registro armazenado no cache

Bom dia rafel,

Como o Leandro citou, uma abordagem é voce copiar o conteudo e distribuir. Se uma maquina falha, nem todas falham. (se todas falham, ja era)

Mas antes disso, a importante entender o papel do Redis nas arquiteturas. Ele não costuma ser utilizado como base primária dos seus dados, o que responde sua pergunta: sim, em geral nós armazenamos em outro lugar um dado e armazenamos no Redis o mesmo dado de forma a otimizar as buscas que queremos fazer.

Isso também acaba respondendo a outra pergunta, que voce vai querer manter o redis "quente" logo apos levanta-lo. Então ou vai pra replicação (como o Leandro citou) ou toda vez que levanta vc re-esquenta ele cacheando os dados, ou toda nova requisição, verifica se ja esta quente, usando os dados do redis, ou se está frio para aquela query especifica, trazendo os dados da sua fonte primaria para o redis.

O Redis pode salvar em disco sim, tem em suas configurações essas opções, mas antes de tudo o mais importante é entender que ele não costuma ser usado como armazenamento primário (as vezes sim, a maior parte das vezes não).

[]s