Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Managing connection to redis from Python

I'm using redis-py in my python application to store simple variables or lists of variables in a Redis database, so I thought it would be better to create a connection to the redis server every time I need to save or retrieve a variable as this is not done very often and I don't want to have a permanent connection that timeout.

After reading through some basic tutorials, I created the connections using the Redis class, but have not found a way to close the connection, as this is the first time I'm using Redis. I'm not sure if I'm using the best approach for managing the connections so I would like some advice for this. This is how I'm setting or getting a variable now:

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) 

I basically use this code to store the last connection time or to get an average of requests per second done to my app and stuff like that.

Thanks for your advice.

like image 308
jeruki Avatar asked Oct 19 '12 03:10

jeruki


People also ask

How does python test Redis connection?

If you want to test redis connection once at startup, use the ping() command. The command ping() checks the connection and if invalid will raise an exception. Note - the connection may still fail after you perform the test so this is not going to cover up later timeout exceptions.


1 Answers

Python uses a reference counter mechanism to deal with objects, so at the end of the blocks, the my_server object will be automatically destroyed and the connection closed. You do not need to close it explicitly.

Now this is not how you are supposed to manage Redis connections. Connecting/disconnecting for each operation is too expensive, so it is much better to maintain the connection opened. With redis-py it can be done by declaring a pool of connections:

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) 

Please note connection pool management is mostly automatic and done within redis-py.

like image 152
Didier Spezia Avatar answered Oct 04 '22 03:10

Didier Spezia