Redis cache vs usando memória diretamente

142

Ainda não usei o Redis, mas ouvi falar e planejo experimentá-lo como armazenamento em cache.

Ouvi Redis usando a memória como banco de dados de armazenamento em cache, então qual é a diferença se eu usar uma variável como objeto ou tipo de dados de dicionário para armazenar dados? gostar:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Qual é a vantagem que os Redis têm?

hh54188
fonte

Respostas:

222

Redis é um servidor de estrutura de dados remota . É certamente mais lento do que apenas armazenar os dados na memória local (já que envolve viagens de ida e volta pelo soquete para buscar / armazenar os dados). No entanto, também traz algumas propriedades interessantes:

  • Redis podem ser acessados ​​por todos os processos de seus aplicativos, possivelmente executando em vários nós (algo que a memória local não pode alcançar).

  • O armazenamento de memória Redis é bastante eficiente e realizado em um processo separado. Se o aplicativo é executado em uma plataforma cuja memória é coletada como lixo (node.js, java, etc ...), permite manipular um cache / armazenamento de memória muito maior. Na prática, pilhas muito grandes não apresentam bom desempenho em idiomas coletados pelo lixo.

  • Redis podem persistir os dados no disco, se necessário.

  • Redis é um pouco mais do que um simples cache: fornece várias estruturas de dados, várias políticas de remoção de itens, filas de bloqueio, pub / sub, atomicidade, scripts Lua, etc ...

  • O Redis pode replicar sua atividade com um mecanismo mestre / escravo para implementar alta disponibilidade.

Basicamente, se você precisar que seu aplicativo seja dimensionado em vários nós que compartilham os mesmos dados, será necessário algo como Redis (ou qualquer outra chave remota / armazenamento de valor).

Didier Spezia
fonte
5
Seu último ponto, especialmente, parece que coisas como o Rlite são um pouco inúteis - uma loja de dicionários seria igualmente adequada na maioria dos casos de uso em que você tem um único processo. Isso está certo?
precisa saber é o seguinte
1
Sim. Na OMI, o interesse da Rlite é bastante limitado.
Didier Spezia
obrigado por essas dicas, então o Redis é ótimo em escala, mas eu suponho que no caso de um aplicativo simples de bate-papo com em média de 300 a 500 objetos a serem recuperados em memor, a estrutura de dados na memória fará o trabalho muito bem, se não for mais rápido, pois esses são poucos números?
Webwoman 24/02/19
2
@DidierSpezia, very large heaps do not perform well with garbage collected languagesvocê pode explicar por quê?
roottraveller
1
@roottraveller, acredito que isso ocorre porque o processo de coleta de lixo geralmente precisa interromper a execução do seu aplicativo ("parar o mundo") para liberar memória da pilha, e quanto maior a pilha, mais longa essa interrupção geralmente dura.
Regorsmitz 27/09/19
3

Atualmente, estamos mais atraídos pela arquitetura do servidor e menos, onde cada solicitação pode ir para um contêiner diferente. Nesse caso, os redis podem desempenhar um papel muito importante.

Não podemos usar menos o cache simples no servidor, pois não podemos ter certeza de que nossa solicitação seja atendida no mesmo contêiner em que nosso cache simples é armazenado.

Nesse caso, precisamos usar o redis, pois ele armazena o cache em local remoto e podemos acessar até mesmo as mudanças de contêiner na arquitetura do servidor, menos.

Ashish Bainade
fonte