Quando usar um armazenamento de chave / valor, como Redis, ao invés / ao lado de um banco de dados SQL?

166

Eu li ótimas coisas sobre armazenamentos de chave / valor, como Redis, mas não consigo descobrir quando é hora de usá-lo em um aplicativo.

Digamos que estou arquitetando um aplicativo baseado na Web; Eu sei qual pilha eu vou usar para o front-end, back-end, banco de dados, etc. quais são alguns dos cenários em que eu diria "ah, também precisamos de Redis para X, Y ou Z".

Eu apreciaria exemplos do node.js. bem como exemplos não-node.js.

Chris Abrams
fonte

Respostas:

102

Não consigo descobrir quando é hora de usá-lo em um aplicativo.

Eu recomendo que você leia este tutorial, que também contém casos de uso. Como o redis é bastante orientado à memória, é realmente bom para dados em tempo real atualizados com freqüência, como armazenamento de sessão, banco de dados de estado, estatísticas, cache e suas estruturas de dados avançadas, que oferecem versatilidade para muitos outros cenários.

Redis, no entanto, não substitui o NoSQL por bancos de dados relacionais clássicos, pois não suporta muitos recursos padrão do mundo RDBMS, como a consulta de seus dados, o que pode atrasá-lo. As substituições são, em vez disso, bancos de dados de documentos como MongoDB ou CouchDB e o redis é ótimo para suplementar funcionalidades específicas, onde a velocidade e o suporte a estruturas de dados avançadas são úteis.

yojimbo87
fonte
3
O tutorial ao qual você vinculou é incrível!
Chris Abrams
5
Eu fiz uma rápida pesquisa no Google com o URL do site tutorial e me deparei com este como um top hit - slideshare.net/dvirsky/introduction-to-redis-version-2
Paul
66

Acho que nada explica melhor os casos de uso do Redis do que este artigo: http://antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html

Aposto que você vai ter um aha! momento . ;)

Uma citação de um leitor anterior:

Já li sobre o Redis e ouvi como as empresas o estão usando, mas nunca entendi completamente seu objetivo. Depois de ler isso, posso dizer que entendo o Redis agora e como é útil. Surpreendente que, depois de ouvir muito sobre tudo o que era necessário, era um artigo relativamente simples.

Uma citação do artigo:

O Redis é diferente de outras soluções de banco de dados de várias maneiras: ele usa a memória como suporte principal de armazenamento e disco apenas para persistência, o modelo de dados é bastante exclusivo, possui um encadeamento único e assim por diante. Penso que outra grande diferença é que, para tirar proveito do Redis em seu ambiente de produção, você não precisa mudar para o Redis. Você pode usá-lo apenas para fazer coisas novas que antes não eram possíveis ou para corrigir problemas antigos.

Casos de uso que o artigo aborda:

  • Lentas listagens de itens mais recentes em sua página inicial
  • Classificações e problemas relacionados
  • Ordenar por votos e hora do usuário
  • O implemento expira nos itens
  • Contando coisas
  • N itens exclusivos em um determinado período de tempo
  • Análise em tempo real do que está acontecendo, para estatísticas, anti-spam ou qualquer outra coisa
  • Pub / Sub
  • Filas
  • Armazenamento em cache
zenw0lf
fonte
Este artigo é muito útil, eu tenho o que eu queria saber
Hos Mercury
@ Zenw0lf Os redis ainda são os melhores para o cache simples? Sua postagem é de 2011, portanto, não tenho certeza se devo usar outra coisa.
Moondra 11/0318
@ Moondra Sim, o projeto ainda está muito vivo e seu criador faz lançamentos frequentes. Ainda é um projeto excelente para diferentes cenários de uso!
Zenw0lf 12/0318
@ zenw0lf Bom artigo, mas continuo um pouco confuso em alguns casos de uso. Por exemplo, o caso de uso "item mais recente", por que é melhor adicionar Redis nesse caso? o que está no banco de dados, adicionamos uma tabela específica apenas para ter identificação do usuário, comentário (identificação) e / ou carimbo de data e hora e usá-lo diretamente. Isso não será o mesmo?
Tony Lin
1
@TonyLin São os dois, é rápido porque está na memória e porque o Redis também possui uma implementação muito boa de modelos de dados de ponta para ajudá-lo a fazer o seu trabalho da melhor maneira possível.
zenw0lf 02/09/19
9
  • Eu adoraria usar redis nos projetos em tempo real. Eu fiz recentemente para um sistema de rastreamento gps, que foi construído anteriormente no mysql como um banco de dados.

    VANTAGEM

    1. Toda vez que o rastreador transmite dados, não preciso abrir a conexão mysql e armazenar nela. Podemos salvá-lo no redis e depois migrar para o mysql usando outro processo. Isso evitará a conexão simultânea do mutiple tracker com o mysql.
    2. Posso publicar todos esses dados de GPS e outros clientes (javascript / android) podem se inscrever em tempo real usando a fila de mensagens baseada em redis
    3. Eu posso acionar alertas em tempo real
sumit
fonte
3

Uma coisa imediata é que o Redis não é um banco de dados relacional. Se você precisar de um SQL "JOIN", não precisará usar o Redis, nem qualquer outro banco de dados não relacional. O Redis é mais rápido que a maioria dos bancos de dados relacionais. Se você só estiver fazendo consultas de par de chave: valor, convém usar o Redis.

EhevuTov
fonte
Por exemplo, seria bom usar o redis para obter informações sobre uma sessão do usuário, para que seja mais rápido acessar nome, email, ID etc.?
23411 Chris Abrams
Eu acho que sim. O Gabinete de Kyoto seria ainda mais rápido para isso, eu acho.
EhevuTov