2014-12-10 11 views
18

Ich habe einen Redis-Server, den ich in fast jeder Django-Ansicht für das Abrufen einiger zwischengespeicherter Daten abfrage. Ich habe ein wenig über Stack-Overflow-Fragen gelesen und gelernt, dass eine neue Redis-Verbindung über r = redis.StrictRedis(host='localhost', port=6379, db=0) für jede einzelne Web-Anfrage schlecht ist und dass ich Connection-Pooling verwenden sollte. HierDjango & Redis: Wie verwende ich Connection Pooling richtig?

ist der Ansatz, den ich kam mit Verbindungs-Pooling in Django:

In settings.py so kann ich es einfach in jedem Django Blick nach oben ziehen, da dies wie eine globalen Variable ist:

# Redis Settings 
import redis 
REDIS_CONN_POOL_1 = redis.ConnectionPool(host='localhost', port=6379, db=0) 

in einigen views.py:

from django.conf import settings 
REDIS_CONN_POOL_1 = settings.REDIS_POOL_1 
r = redis.Redis(connection_pool=REDIS_CONN_POOL_1) 
r.get("foobar") # Whatever operation 

Also, meine Frage ist: ist das der richtige Weg Connection Pooling in Django zu tun? Gibt es bessere Ansätze für diejenigen, die ein ähnliches Szenario wie dieses erlebt haben? Dies ist wahrscheinlich besser als meine alte Methode, bei jeder Anfrage eine neue Verbindung zu öffnen und zu schließen.

EDIT: Erfasste mein Verständnis darüber, warum es falsch ist, eine neue Verbindung auf jede Anfrage von diesem stackoverflow question zu öffnen.

Antwort

1

Ein besserer Ansatz zur Einrichtung redis als Djangos Cache Backend mit Django redis cache App wäre. Es gibt Ihnen eine fertige Lösung für Ihr Problem und Sie können die offizielle Cache-Bibliothek von Django nutzen, um Redis zu erreichen, wann immer Sie gecachte Informationen erhalten oder einstellen wollen. Sie können auch Kompatibilitätsprobleme in Ihrer Anwendung vermeiden, wenn Sie sich dazu entschließen, das Cache-Backend auf etwas anderes zu ändern.

Hier ist eine einfache Anleitung folgen:

Using Redis as Django's session store and cache backend

+0

Dies ist für eine DB wie eine gute Lösung zu sein scheint. Haben Sie eine Idee, wie Sie mehrere DBs angeben oder zwischen DBs wechseln, wenn Sie Operationen über 'from django.core.cache import cache' ausführen? Von dem, was ich beim Lesen von Django Redis Cache-Dokumenten gesammelt habe, können wir nur einen einzelnen DB angeben. – user1757703

+0

Nun, die Anzahl der DBs ist in redis auf 12 begrenzt. Es wäre viel einfacher, Schlüsselpräfixe zu verwenden. Sie können sogar Ihre eigenen Hilfsmethoden schreiben, um sie zu erreichen, ohne viel zu tun. Warum brauchst du übrigens mehrere DBs? – martincpt

+0

Ich brauche mehrere DBs, weil ich meine Daten basierend auf der Art der Daten in mehreren DBs organisiere. – user1757703

Verwandte Themen