2014-12-10 132 views
18

我有一个Redis服务器,我在几乎每个Django视图上查询以获取一些缓存数据。我对一些stackoverflow问题做了一些阅读,并了解到通过r = redis.StrictRedis(host='localhost', port=6379, db=0)为每个Web请求创建一个新的Redis连接是不好的,我应该使用连接池。Django&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的每个请求。

回答

1

一个更好的办法是设置的Redis为您Django的缓存后端Django redis cache应用。它为您的问题提供了一个完整的解决方案,您可以使用Django的官方缓存库来随时获取或设置缓存信息。如果您决定将缓存后端更改为其他内容,则还可以避免应用程序中存在兼容性问题。

下面是一个易于遵循教程:

Using Redis as Django's session store and cache backend

+0

这似乎是一个DB一个很好的解决方案。任何想法如何指定多个DB或在通过'from django.core.cache import cache'执行操作时在DB之间切换?根据我收集的阅读Django redis缓存文档,我们只能指定一个数据库。 – user1757703 2014-12-13 08:59:12

+0

那么数据库的数量在redis中限制为12个。使用密钥前缀会更容易。你甚至可以编写你自己的帮助器方法来达到他们,而不会弄乱很多。为什么你需要乘以数据库? – martincpt 2014-12-13 11:31:45

+0

我需要多个数据库,因为我根据数据类型将数据组织到多个数据库中。 – user1757703 2014-12-13 17:55:56