我有一个Redis服务器,我几乎在每个Django视图上查询以获取一些缓存数据。我已经对一些stackoverflow问题做了一些阅读,并了解到通过r = redis.StrictRedis(host='localhost', port=6379, db=0)
为每个Web请求建立一个新的Redis连接是不好的,我应该使用连接池。
这是我在Django中为连接池提出的方法:
在settings.py
中,所以我可以在任何Django视图中轻松提升它,因为这就像一个全局变量:
# Redis Settings
import redis
REDIS_CONN_POOL_1 = redis.ConnectionPool(host='localhost', port=6379, db=0)
在某些views.py
中:
from django.conf import settings
REDIS_CONN_POOL_1 = settings.REDIS_POOL_1
r = redis.Redis(connection_pool=REDIS_CONN_POOL_1)
r.get("foobar") # Whatever operation
所以,我的问题是:这是在Django中进行连接池的正确方法吗?对于那些经历过类似场景的人来说,有没有更好的方法?这可能比我在每次请求时打开和关闭与redis的新连接的旧方法更好。
编辑:我理解为什么在stackoverflow question的每个请求上打开新连接时出错是什么错误。
答案 0 :(得分:1)
更好的方法是使用 Django redis cache 应用将redis设置为 Django的缓存后端。它为您的问题提供了完整的解决方案,您可以使用Django的官方缓存库来获取或设置缓存信息时达到redis。如果您决定将缓存后端更改为其他内容,也可以避免应用程序中的兼容性问题。
这是一个易于学习的教程:
<强> Using Redis as Django's session store and cache backend 强>