管理从Python连接到redis

时间:2012-10-19 03:47:47

标签: python connection redis

我在我的python应用程序中使用redis-py在Redis数据库中存储简单变量或变量列表,所以我认为每次需要保存或创建与redis服务器的连接会更好检索变量,因为这种情况不常发生,并且不希望永久连接可能超时。

阅读一些基本教程我使用Redis类创建了连接,但是没有找到关闭连接的方法,因为这是我第一次使用Redis。我不确定我是否使用最好的方法来管理连接,所以我想为此提出一些建议。 这就是我现在setget变量的方式:

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)

我基本上使用此代码来存储上次连接时间,或者获取每秒对我的应用程序执行的平均请求数等等。

感谢您的建议。

3 个答案:

答案 0 :(得分:71)

Python使用引用计数器机制来处理对象,因此在块的末尾,my_server对象将被自动销毁并关闭连接。您无需明确关闭它。

现在,您不应该如何管理Redis连接。每次操作的连接/断开都太昂贵,因此保持连接打开要好得多。使用redis-py,可以通过声明连接池来完成:

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)

请注意,连接池管理主要是自动完成的,并且在redis-py中完成。

答案 1 :(得分:2)

@ sg1990如果你有10.000个用户同时需要redis怎么办?他们不能共享一个连接,你刚刚创造了自己的瓶颈。

使用连接池,您可以创建任意数量的连接,只需使用redis-py docs中的$this->getUrl()get_connection()

每个用户的连接是一个巨大的过度杀伤,因为每个连接都需要维护一个打开的套接字。这样你就会自动减少一些例如你的机器可以处理一半的并发websocket用户。

答案 2 :(得分:0)

你可以用这个在redis中创建两个数据库:

    r1  = redis.StrictRedis(host="localhost", port=6379, db=0, decode_responses=True)
    r2  = redis.StrictRedis(host="localhost", port=6379, db=1, decode_responses=True)