2014-12-10 137 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