2011-03-07 80 views
4

所以我想緩存一些數據在mysql和一些在memcached中。Django多緩存BACKEND路由器howto?

此刻我有這個在我的配置文件,但我不知道如何寫路由器緩存後端。

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION': '127.0.0.1:11211', 
    } 
} 

我使用多數據庫結構,我知道如何編寫多數據庫路由器。

settings.py中

DATABASE_ROUTERS = ['oceankeys.dbrouter.SphinxRouter','oceankeys.dbrouter.DefaultDbRouter'] 

任何一個

知道如何使Django的緩存BACKEND路由器?

感謝

回答

3

我不相信Django的緩存框架可以模仿分貝一般路由

對於使用緩存框架middleware你必須指定settings.py緩存的名稱站點緩存,如:

CACHE_MIDDLEWARE_ALIAS = "my_cache_alias" 

對於頁面緩存你可以手動指定名稱在裝飾緩存,例如:

@cache_page(60 * 15, cache="my_cache_alias") 
    def my_view(request): 
    ... 

我不知道緩存路由確實是有道理的網站,頁面緩存,所以我沒有與方式的問題這被設計。

現在,對於您使用MySQL作爲數據庫緩存後端的情況,您可以按照上的Django文檔部分進行設置並製作路由器。例如,這將是您的CACHES設置:

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION': '127.0.0.1:11211', 
    } 
    'my_cache_alias': { 
     'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 
     'LOCATION': 'my_cache_table', 
    } 
} 

然後創建標識用於哪些車型,其緩存後端的路由器。它的外觀和工作原理與DB路由器完全相同(正如您應該能夠從database caching and multiple databases的doc部分看到的),不同之處在於它返回緩存別名而不是數據庫別名。

0

e.g

settings.py

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION': '127.0.0.1:11211', 
    }, 
    'myalias':{ 
     'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 
     'LOCATION': 'my_cache_table', 
    } 
} 

views.py

from django.core.cache import caches 
cache = caches['myalias'] 
cache.set('my_key', 'hello, world!', 30) 
print cache.get('my_key') 

你可以看到Django’s cache framework(節:Accessing the cache)詳細