我在我的python应用程序中使用redis-py
在Redis数据库中存储简单变量或变量列表,所以我认为每次需要保存或创建与redis服务器的连接会更好检索变量,因为这种情况不常发生,并且不希望永久连接可能超时。
阅读一些基本教程我使用Redis类创建了连接,但是没有找到关闭连接的方法,因为这是我第一次使用Redis。我不确定我是否使用最好的方法来管理连接,所以我想为此提出一些建议。
这就是我现在set
或get
变量的方式:
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)
我基本上使用此代码来存储上次连接时间,或者获取每秒对我的应用程序执行的平均请求数等等。
感谢您的建议。
答案 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)