Como posso usar redis com Django?

95

Já ouvi falar de redis-cache, mas como funciona exatamente? É usado como uma camada entre o django e o meu rdbms, armazenando em cache as consultas do rdbms de alguma forma?

Ou deve ser usado diretamente como banco de dados? O que eu duvido, já que a página do github não cobre nenhum detalhe de login, nenhuma configuração .. apenas diz para você definir alguma propriedade de configuração.

Meder Omuraliev
fonte

Respostas:

72

Este módulo Python para Redis tem um exemplo de uso claro no leia-me: http://github.com/andymccurdy/redis-py

O Redis foi projetado para ser um cache de RAM. Ele suporta GET e SET básicos de chaves, além do armazenamento de coleções, como dicionários. Você pode armazenar consultas RDBMS em cache, armazenando sua saída no Redis. O objetivo seria acelerar seu site Django. Não comece a usar o Redis ou qualquer outro cache até que você precise da velocidade - não otimize prematuramente.

Spike Gronim
fonte
Mas como você verifica se o cache no redis precisa ser atualizado? Você compara a contagem de registros ou existe uma maneira melhor?
Marconi
7
Isso geralmente é feito definindo um TTL para a chave: redis.io/commands/ttl . Se a chave expirar, você deve ir ao banco de dados. Portanto, se a chave estiver em redis, você a usa. Observe que a implementação simples disso causa alguns problemas: quando uma chave popular expira, você tem en.wikipedia.org/wiki/Thundering_herd_problem , deseja usar en.wikipedia.org/wiki/Negative_cache e seu banco de dados precisa de en.wikipedia. org / wiki / Admission_control
Spike Gronim,
4
Umm, bem, a) Redis é projetado para ser mais do que cache de RAM - é persistente (mas inclui recursos para cache), b) é mais do que armazenamento de valor-chave simples - há listas, hashsets etc. com manipulações integradas.
Olli
8
O armazenamento honesto de objetos de modelo / resposta em cache não se enquadra na otimização prematura. A menos que você esteja sendo cobrado para fazer isso (como no heroku), não custa nada armazenar em cache, mesmo para aplicativos pequenos.
vikki
1
Não se trata de velocidade, mas de recursos. Uma tabela em cache será mais barata.
dman
60

Só porque o Redis armazena coisas na memória não significa que ele foi feito para ser um cache. Já vi pessoas usando-o como um armazenamento persistente de dados.

O fato de poder ser usado como cache é uma indicação de que é útil como armazenamento de alto desempenho. Se o seu sistema Redis falhar, você poderá perder dados que não foram gravados de volta no disco. Existem algumas maneiras de mitigar esses perigos, por exemplo, uma réplica hot-standby. Se seus dados são de 'missão crítica', como se você dirige um banco ou uma loja, o Redis pode não ser a melhor escolha para você. Mas se você escrever um jogo de alto tráfego com dados persistentes ao vivo ou alguma coisa de interação social e gerenciar a probabilidade de perda de dados para ser bastante aceitável, então vale a pena dar uma olhada no Redis.

De qualquer forma, a questão permanece, sim, o Redis pode ser usado como um banco de dados.

Stefan Schubert-Peters
fonte
3
Para minha empresa, usamos o Redis para armazenar resumos e produtos gerados a partir do Cassandra & Postgres. A quantidade desses produtos (vários bilhões), a frequência com que precisam ser trocados e o fato de nunca sabermos o que é necessário em nenhum momento os torna perfeitos para redis. Além disso, quando você ultrapassa um milhão de linhas de qualquer coisa em um banco de dados SQL, o redis pode ser um ótimo recurso complementar para testes de associação (por exemplo, essas entidades estão neste domínio?)
David
Não posso deixar de me perguntar por que minha resposta, que apontava exatamente o mesmo ponto vários meses antes, foi superada pela sua ... Bem.
ostergaard
22

Redis é basicamente uma loja KV 'na memória' com muitos sinos e apitos. É extremamente flexível. Você pode usá-lo como um armazenamento temporário, como um cache, ou um armazenamento permanente, como um banco de dados (com ressalvas conforme mencionado em outras respostas).

Quando combinado com Django, o caso de uso melhor / mais comum para o Redis é provavelmente para armazenar em cache 'respostas' e sessões.

Há um back-end aqui https://github.com/sebleier/django-redis-cache/ e excelente documentação nos documentos do Django aqui: https://docs.djangoproject.com/en/1.3/topics/cache/ .

Recentemente comecei a usar https://github.com/erussell/django-redis-status para monitorar meu cache - funciona muito bem. (Configure maxmemory no redis ou os resultados não serão muito úteis).

Ostergaard
fonte
5

Você também pode usar o Redis como uma fila para tarefas distribuídas em seu aplicativo Django. Você pode usá-lo como um corretor de mensagens para Celery ou Python RQ .

Dmitrii Mikhailov
fonte
2

Redis como banco de dados primário

Sim, você pode usar o armazenamento de valores-chave do Redis como banco de dados primário. O Redis não apenas armazena pares de valores-chave, mas também suporta diferentes estruturas de dados, como

  1. Lista
  2. Conjunto
  3. Conjunto ordenado
  4. Hashes
  5. Bitmaps
  6. Hyperlogs

Tipos de dados Redis Documento oficial

O Redis está no armazenamento de valores-chave da memória, portanto, você deve estar ciente disso se ocorrer uma falha no servidor Redis, seus dados serão perdidos.

O Redis também pode persistir na verificação de dados oficiais.

Redis Persistence Official doc


Redis como um cache

Sim, o Redis reside no Django e no RDBMS.

Como funciona

given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page

Documento oficial do framework de cache do Django


Como posso usar Redis com Django

Podemos usar o cliente redis python redis-py para o aplicativo Django.

Cliente Redis python redis-py Github

Podemos usar Django-redis para backend de cache django.

Django-redis construído em redis-py e adiciona recursos extras relacionados ao aplicativo django.

Django-redis doc Github

Outras bibliotecas também existem.


Casos de uso e tipos de dados do Redis

Alguns casos de uso

  • Cache de sessão
  • Análise em tempo real
  • Cache da web
  • Tabelas de classificação

Principais casos de uso do Redis por tipos de estrutura de dados principais


Grandes empresas de tecnologia usando Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Muhammad Faizan Fareed
fonte