为了能够在我的django应用程序中使用redis列表,我已经选择了redis.StrictRedis
连接,而不是stardard django cache.get
和cache.set
。我在不同的功能中经常使用它。
我的示例代码如下:
import redis
r = redis.StrictRedis(unix_socket_path='/var/run/redis/redis.sock', db=3)
posts = r.lrange('posts', 0 , -1)
但是我遇到了一些性能问题(gunicorn线程在高负载下停滞,并且我经常遇到502)
我想这些是由于没有使用池过多的
redis.StrictRedis
连接造成的。如果是这样,我想知道如何使用连接池而不是为每个数据提取建立到Redis的连接? 最佳答案
您依次创建的每个Redis实例都会创建自己的连接池。您可以使用Python中的单例设计来覆盖此行为,如下所示:
import redis
class RedisOperation(object):
def __new__(cls):
if not hasattr(cls, 'instance'):
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
cls.instance=redis.StrictRedis(connection_pool=pool)
return cls.instance
obj1=RedisOperation()
print(id(obj1))
obj2 = RedisOperation()
print(id(obj2))
以上两个对象都引用相同的Redis连接池。
有关更多详细信息,请引用redis docs
关于python - 如何将连接池用于redis.StrictRedis?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57902876/