48

redis-py在我的 python 应用程序中使用在 Redis 数据库中存储简单变量或变量列表,所以我认为每次需要保存或检索变量时创建与 redis 服务器的连接会更好,因为这不是经常做,我不想有一个超时的永久连接。

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

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)

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

谢谢你的建议。

4

3 回答 3

77

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 中完成。

于 2012-10-19T11:41:17.160 回答
4

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

使用连接池,您可以创建任意数量的连接并简单地使用get_connection()and release(),来自redis-py docs

每个用户的连接是一个巨大的矫枉过正,因为每个连接都需要维护一个打开的套接字。这样,您将自动将您的机器可以处理的并发 websocket 用户数量减少一半。

于 2015-05-19T13:28:39.693 回答
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)
于 2021-02-13T20:58:36.930 回答