2013-03-13 9 views
7

Welches ist das beste Muster für Redis-Verbindungen (sowohl für die direkte und indirekte Interaktion mit Redis über Python-RQ)?Wie können Redis-Verbindungen mit Python/Python RQ richtig gehandhabt werden?

Im Allgemeinen müssen Datenbankverbindungen geschlossen/zu einem Pool zurückgegeben werden, wenn das erledigt ist, aber ich sehe nicht, wie man das mit redis-py macht. Das lässt mich fragen, ob ich es falsch mache.

Außerdem habe ich einige Leistungseinbußen beim Einreihen von Jobs in RQ gesehen, von denen mir gesagt wurde, dass sie sich auf schlechte Verbindungsnutzung/Wiederverwendung beziehen.

Grundsätzlich bin ich daran interessiert, das richtige Muster zu kennen, damit ich entweder überprüfen oder korrigieren kann, was wir in unserer Anwendung haben.

Vielen Dank! Wenn es mehr Informationen gibt, die hilfreich wären, lassen Sie es mich wissen.

Antwort

4

Hinter den Kulissen verwendet redis-py einen Verbindungspool, um Verbindungen zu einem Redis-Server zu verwalten. Standardmäßig erstellt jede von Ihnen erstellte Redis-Instanz einen eigenen Verbindungspool. Sie können dieses Verhalten überschreiben und einen vorhandenen Verbindungspool verwenden, indem Sie eine bereits erstellte Verbindungspoolinstanz an das Argument connection_pool der Redis-Klasse übergeben. Sie können dies tun, um Client Sharing zu implementieren oder feinere Kontrolle darüber zu haben, wie Verbindungen verwaltet werden.

pool = redis.ConnectionPool(host='localhost', port=6379, db=0) 
r = redis.Redis(connection_pool=pool) 
+0

Großartig! Es ist mir jedoch immer noch nicht klar, ob die von diesem Verbindungspool zurückgegebenen Verbindungen an irgendeinem Punkt geschlossen werden sollten oder ob sie automatisch behandelt werden. Irgendeine Idee? –

+0

Ich mache keine Schließung der Verbindungen noch habe ich darüber gelesen und sehe noch keine Leistungsprobleme. Vielleicht gibt es einen richtigen Weg, die Verbindungen zu handhaben – mmenafra

Verwandte Themen