2012-10-19 12 views
35

Ich verwende redis-py in meiner Python-Anwendung, um einfache Variablen oder Listen von Variablen in einer Redis-Datenbank zu speichern, also dachte ich, es wäre besser, eine Verbindung zum Redis-Server zu schaffen Speichern oder Abrufen einer Variablen, da dies nicht sehr häufig geschieht und keine permanente Verbindung mit Timeout erforderlich ist.Verwalten der Verbindung zu redis von Python

Lesen einiger grundlegender Lernprogramme Ich habe die Verbindungen mit der Redis-Klasse erstellt, aber keine Möglichkeit gefunden, die Verbindung zu schließen, da dies das erste Mal ist, dass ich Redis verwende. Ich bin mir nicht sicher, ob ich den besten Ansatz für die Verwaltung der Verbindungen verwende, deshalb hätte ich gerne einen Ratschlag dafür. Dies ist, wie ich bin set ting oder get ting eine Variable jetzt:

import redis 

def getVariable(variable_name): 
    my_server = redis.Redis("10.0.0.1") 
    response = my_server.get(variable_name) 
    return response 

def setVariable(variable_name, variable_value): 
    my_server = redis.Redis("10.0.0.1") 
    my_server.set(variable_name, variable_value) 

Ich mag im Grunde diesen Code verwenden, um die letzte Verbindungszeit zu speichern oder zu einem Durchschnitt von Anfragen pro Sekunde auf meine App und Sachen erledigt werden Das.

Vielen Dank für Ihren Rat.

Antwort

54

Python verwendet einen Referenzzähler-Mechanismus, um mit Objekten umzugehen. Am Ende der Blöcke wird das Objekt my_server automatisch zerstört und die Verbindung geschlossen. Sie müssen es nicht explizit schließen.

Nun sollten Sie Redis-Verbindungen nicht so verwalten. Verbinden/Trennen für jede Operation ist zu teuer, so dass es viel besser ist, die Verbindung offen zu halten.

import redis 

POOL = redis.ConnectionPool(host='10.0.0.1', port=6379, db=0) 

def getVariable(variable_name): 
    my_server = redis.Redis(connection_pool=POOL) 
    response = my_server.get(variable_name) 
    return response 

def setVariable(variable_name, variable_value): 
    my_server = redis.Redis(connection_pool=POOL) 
    my_server.set(variable_name, variable_value) 

Bitte beachten Sie Connection-Pool-Management meist automatisch und innerhalb redis-py getan: Mit redis-py kann, indem er erklärt, einen Pool von Verbindungen erfolgen.

+0

danke ich wusste nicht darüber, aber wenn ich den Verbindungspool erstellen habe ich eine Methode, um es zu schließen, wenn ich aus diesem Modul oder ist es nicht notwendig? – jeruki

+2

Nicht erforderlich. Python wird die Verbindung schließen, wenn die letzte Referenz auf das POOL-Objekt zerstört wird (hier am Ende des Skripts). –

+0

Vielen Dank das ist alles, was ich wissen musste – jeruki

2

@ sg1990 Was ist, wenn Sie 10.000 Benutzer haben, die zur gleichen Zeit die Redis-Funktion benötigen? Sie können sich keine einzige Verbindung teilen und haben sich gerade einen Engpass geschaffen.

Mit einem Pool von Verbindungen können Sie eine beliebige Anzahl von Verbindungen erstellen und einfach get_connection() und release() von redis-py docs verwenden.

Eine Verbindung pro Benutzer ist ein riesiger Overkill, da jede Verbindung einen offenen Socket aufrechterhalten muss. Auf diese Weise würden Sie automatisch eine Anzahl von z.B. gleichzeitige Websocket-Benutzer, die Ihre Maschine um die Hälfte verarbeiten kann.

+0

Der AFAIK-Verbindungspool wird automatisch erstellt, entweder Sie geben ihn explizit an oder nicht.Das gilt für das, was ich von Quelle https://github.com/andymccurdy/redis-py/blob/master/redis/client.py#L493 sehen kann –

Verwandte Themen