2010-09-27 10 views
84

Ho sentito parlare di redis-cache ma come funziona esattamente? È usato come strato tra django e my rdbms, memorizzando in cache le query rdbms in qualche modo?Come posso utilizzare redis con Django?

Oppure dovrebbe essere utilizzato direttamente come database? Che dubito, dal momento che quella pagina github non copre i dettagli di accesso, nessuna configurazione .. ti dice solo di impostare alcune proprietà di configurazione.

risposta

64

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

Redis è progettato per essere una memoria RAM. Supporta GET e SET di chiavi di base oltre alla memorizzazione di raccolte come i dizionari. È possibile memorizzare nella cache le query RDBMS memorizzando il loro output in Redis. L'obiettivo sarebbe quello di velocizzare il tuo sito Django. Non iniziare a utilizzare Redis o qualsiasi altra cache finché non hai bisogno della velocità: non ottimizzarla prematuramente.

+0

Ma come si controlla che la cache su redis debba essere aggiornata? Confrontate il conteggio dei record o c'è un modo migliore? – Marconi

+7

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

+0

Puoi definire "compatibile API"? Il protocollo è sicuramente diverso. Per citare l'autore di Redis «Fondamentalmente nel protocollo memcached la lunghezza del payload era uno degli argomenti separati dallo spazio, mentre nel protocollo Redis è a offset fisso (c'è solo un carattere" $ "prima)» (Fonte: http: //antirez.com/post/redis-memcached-benchmark.html) Tuttavia, è vero che dal momento che entrambi sono key/value store, dovrebbe essere piuttosto semplice adattare il codice usando Memcached per usare Redis. La mia ipotesi migliore è che intendessi "puoi sostituire un modulo/classe con un altro", giusto? – jpetazzo

18

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

Se combinato con Django, il caso di utilizzo migliore/più comune per Redis è probabilmente quello di memorizzare le "risposte" nella cache.

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

Ho recentemente iniziato a utilizzare https://github.com/erussell/django-redis-status per monitorare la cache - funziona un fascino. (Configura maxmemory su redis oppure i risultati non sono molto utili).

58

Solo perché Redis memorizza le cose in memoria non significa che si tratti di una cache. Ho visto persone che lo usano come archivio persistente per i dati.

Che può essere utilizzato come cache è un suggerimento che è utile come memoria ad alte prestazioni. Se il sistema Redis si interrompe, si potrebbero perdere dati che non sono stati nuovamente scritti sul disco. Esistono alcuni modi per mitigare tali pericoli, ad es. una replica hot-standby. Se i tuoi dati sono "mission-critical", come se gestissi una banca o un negozio, Redis potrebbe non essere la scelta migliore per te. Ma se si scrive un gioco ad alto traffico con dati live persistenti o alcuni elementi di interazione sociale e si gestisce la probabilità che la perdita di dati sia abbastanza accettabile, allora Redis potrebbe valere la pena dare un'occhiata.

In ogni caso, il punto rimane, sì, Redis può essere utilizzato come database.

+3

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

+0

Non riesco a chiedermi perché la mia risposta ha reso esattamente la stessa cosa punto diversi mesi prima è stato scavalcato dal tuo ... Oh bene. – ostergaard

4

È inoltre possibile utilizzare Redis come coda per le attività distribuite nell'app Django. Puoi usarlo come broker di messaggi per Celery o Python RQ.

Problemi correlati