2011-05-10 103 views
17

我需要使用基於memcached和基於文件的緩存。 我設置我的緩存設置:如何在Django中使用2個不同的緩存後端?

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 
     'LOCATION': 'c:/foo/bar', 
    }, 
    'inmem': { 
     'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 
    } 
} 

虛擬是暫時的。 文件說:

cache.set('my_key', 'hello, world!', 30) 
cache.get('my_key') 

OK,但我怎麼能現在設置和獲取只爲「inmem」緩存後端緩存(未來memcached的)?文檔沒有提及如何做到這一點。

回答

25
CACHES = { 
    'default': { 
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 
    'LOCATION': 'c:/foo/bar', 
    }, 
    'inmem': { 
    'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 
    } 
} 

from django.core.cache import get_cache, cache 
inmem_cache = get_cache('inmem') 
default_cache = get_cache('default') 
# default_cache == cache 
+1

此答案需要更新 – 2017-02-21 21:12:38

-2

不幸的是,您無法更改哪個緩存別名用於低級別cache.set()cache.get()方法。

這些方法總是使用「默認」緩存爲每行51(在Django 1.3)的django.core.cache.__init__.py

DEFAULT_CACHE_ALIAS = 'default' 

所以,你需要你的「默認」緩存設置爲你想要使用的緩存低級緩存,然後使用其他別名來實現站點緩存,頁面緩存和數據庫緩存路由。 `

2

除了上述羅的回答......您也可以有條件地進口的名字高速緩存,並使用默認(或任何其他高速緩存)如果請求不存在。

from django.core.cache import cache as default_cache, get_cache 
from django.core.cache.backends.base import InvalidCacheBackendError 

try: 
    cache = get_cache('foo-cache') 
except InvalidCacheBackendError: 
    cache = default_cache 

cache.get('foo') 
7

由於Django 1.9,get_cache已被棄用。執行以下操作來解決'inmem'中的密鑰(除了由羅馬人回答):

from django.core.cache import caches 
caches['inmem'].get(key) 
相關問題