Come posso usare redis con Django?


95

Ho sentito parlare di redis-cache ma come funziona esattamente? Viene utilizzato come livello tra django e il mio rdbms, memorizzando in qualche modo le query rdbms nella cache?

O dovrebbe essere utilizzato direttamente come database? Di cui dubito, dal momento che quella pagina github non copre alcun dettaglio di accesso, nessuna configurazione .. ti dice solo di impostare alcune proprietà di configurazione.

Risposte:


72

Questo modulo Python per Redis ha un chiaro esempio di utilizzo nel file readme: http://github.com/andymccurdy/redis-py

Redis è progettato per essere una cache RAM. Supporta GET e SET di chiavi di base oltre alla memorizzazione di raccolte come dizionari. Puoi memorizzare nella cache le query RDBMS archiviando il loro output in Redis. L'obiettivo sarebbe velocizzare il tuo sito Django. Non iniziare a utilizzare Redis o qualsiasi altra cache fino a quando non hai bisogno della velocità, non ottimizzare prematuramente.


Ma come si controlla che la cache su Redis debba essere aggiornata? Confronti il ​​conteggio dei record o esiste un modo migliore?
Marconi

7
Questo di solito viene fatto impostando un TTL per la chiave: redis.io/commands/ttl . Se la chiave scade, devi andare al DB. Quindi, se la chiave è in redis, la usi. Nota che la semplice implementazione di questo causa alcuni problemi: quando una chiave popolare scade hai en.wikipedia.org/wiki/Thundering_herd_problem , vuoi usare en.wikipedia.org/wiki/Negative_cache e il tuo DB ha bisogno di en.wikipedia. org / wiki / Admission_control
Spike Gronim

4
Umm, beh, a) Redis è progettato per essere più della cache RAM: è persistente (ma include funzionalità per la cache), b) è più di una semplice memorizzazione di valori-chiave: ci sono elenchi, set di hash ecc. Con manipolazioni incorporate.
Olli

8
Onestamente la memorizzazione nella cache di oggetti modello / risposta non rientra nell'ottimizzazione prematura. A meno che non ti venga addebitato di farlo (come su heroku) non fa male memorizzare nella cache anche per piccole app.
vikki

1
Non si tratta di velocità, si tratta di risorse. Una tabella nella cache sarà meno costosa.
dman

60

Solo perché Redis archivia le cose in memoria non significa che debba essere una cache. Ho visto persone usarlo come archivio persistente di dati.

Il fatto che possa essere utilizzato come cache indica che è utile come archivio ad alte prestazioni. Se il tuo sistema Redis non funziona, potresti perdere dati che non sono stati riscritti di nuovo sul disco. Esistono alcuni modi per mitigare tali pericoli, ad esempio una replica hot-standby. Se i tuoi dati sono "mission-critical", ad esempio se gestisci una banca o un negozio, Redis potrebbe non essere la scelta migliore per te. Ma se scrivi un gioco ad alto traffico con dati live persistenti o alcune cose di interazione sociale e gestisci la probabilità di perdita di dati in modo abbastanza accettabile, allora Redis potrebbe valere la pena dare un'occhiata.

Comunque, il punto resta, sì, Redis può essere utilizzato come database.


3
Per la mia azienda, utilizziamo Redis per archiviare riepiloghi e prodotti generati da Cassandra e Postgres. La quantità di questi prodotti (diversi miliardi), la frequenza con cui devono essere cambiati e il fatto che non sappiamo mai cosa è necessario in qualsiasi momento, li rende perfetti per redis. Inoltre, una volta che si supera un milione di righe di qualsiasi cosa in un database SQL, redis può essere un'ottima risorsa gratuita per i test di appartenenza (ad esempio, queste entità sono in questo dominio?)
David

Non posso fare a meno di chiedermi perché la mia risposta che faceva esattamente lo stesso punto diversi mesi prima è stata scavalcata dalla tua ... Oh beh.
ostergaard

22

Redis è fondamentalmente un negozio KV "in memoria" con un sacco di campane e fischietti. È estremamente flessibile. Puoi usarlo come archivio temporaneo, come una cache o come archivio permanente, come un database (con avvertenze come menzionato in altre risposte).

Se combinato con Django, il caso d'uso migliore / più comune per Redis è probabilmente quello di memorizzare nella cache "risposte" e sessioni.

C'è un backend qui https://github.com/sebleier/django-redis-cache/ e un'eccellente documentazione nella documentazione di Django qui: https://docs.djangoproject.com/en/1.3/topics/cache/ .

Recentemente ho iniziato a utilizzare https://github.com/erussell/django-redis-status per monitorare la mia cache: funziona un fascino. (Configura maxmemory su redis oi risultati non sono così utili).



2

Redis come database principale

Sì, puoi utilizzare l'archivio valori-chiave Redis come database principale. Redis non solo memorizza le coppie chiave-valore, ma supporta anche diverse strutture di dati come

  1. Elenco
  2. Impostato
  3. Set ordinato
  4. Hash
  5. Bitmap
  6. Hyperloglog

Redis Tipi di dati Documento ufficiale

Redis si trova nell'archivio valori-chiave della memoria, quindi è necessario che se ne accorga se si verifica un errore del server Redis, i dati andranno persi.

Redis può anche rendere persistente il controllo dei dati documento ufficiale.

Redis Persistence Official doc


Redis come cache

Sì, Redis risiede tra Django e RDBMS.

Come funziona

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

Il framework della cache di Django Official Doc


Come posso usare Redis con Django

Possiamo usare redis python client redis-py per l'applicazione Django.

Redis python client redis-py Github

Possiamo usare Django-redis per il backend della cache django.

Django-redis si basa su redis-py e ha aggiunto funzionalità extra relative all'applicazione django.

Django-redis doc Github

Esistono anche altre biblioteche.


Casi d'uso e tipi di dati di Redis

Alcuni casi d'uso

  • Cache di sessione
  • Analisi in tempo reale
  • Memorizzazione nella cache Web
  • Classifiche

Principali casi d'uso Redis per tipi di struttura dati principali


Aziende Big Tech che utilizzano Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.