Gestion de la connexion à redis à partir de Python

J'utilise redis-py dans mon application python pour stocker des variables simples ou des listes de variables dans une base de données Redis, donc j'ai pensé qu'il serait préférable de créer une connexion au serveur redis chaque fois que j'ai besoin d'enregistrer ou de récupérer une variable car cela n'est pas fait très souvent et ne veut pas

En lisant quelques tutoriels de base, j'ai créé les connexions en utilisant la classe Redis, mais je n'ai pas trouvé de moyen de fermer la connexion, comme c'est le cas la première fois que J'utilise Redis. Je ne suis pas sûr si j'utilise la meilleure approche pour gérer les connexions, donc je voudrais quelques conseils pour cela. C'est ainsi que je suis setting ou get ting une variable maintenant:

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)

J'utilise essentiellement ce code pour stocker la dernière heure de connexion ou pour obtenir une moyenne de requêtes par seconde sur mon application et des choses comme ça.

Merci pour vos conseils.

39
demandé sur John Strood 2012-10-19 07:47:47

2 réponses

Python utilise un mécanisme de compteur de référence pour traiter les objets, donc à la fin des blocs, l'objet my_server sera automatiquement détruit et la connexion fermée. Vous n'avez pas besoin de fermer explicitement.

Maintenant, ce n'est pas comme ça que vous êtes censé gérer les connexions Redis. La connexion / déconnexion pour chaque opération est trop coûteuse, il est donc préférable de maintenir la connexion ouverte. Avec redis-py, cela peut être fait en déclarant un pool de connexions:

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)

Veuillez noter que la gestion du pool de connexions est principalement automatique et effectuée dans redis-py.

61
répondu Didier Spezia 2012-10-19 11:41:17

@sg1990 que faire si vous avez 10.000 utilisateurs nécessitant redis en même temps? Ils ne peuvent pas partager une seule connexion et vous venez de vous créer un goulot d'étranglement.

Avec un pool de connexions, vous pouvez créer un nombre arbitraire de connexions et de simplement utiliser get_connection() et release(), de redis-py docs.

Une connexion par utilisateur est une énorme surcharge, car chaque connexion doit maintenir une socket ouverte. De cette façon vous diminueriez automatiquement un nombre de par exemple simultané utilisateurs websocket que votre machine peut gérer de moitié.

2
répondu haren 2015-05-19 13:28:39