Django多重缓存BACKEND路由器怎样?

时间:2011-03-07 07:48:41

标签: django memcached django-cache

所以我想在mysql中缓存一些数据,在memcached中缓存一些数据。

此刻我有这个在我的配置文件中,但我不知道如何为缓存后端编写路由器。

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 路由器?

由于

2 个答案:

答案 0 :(得分:3)

我不相信Django缓存框架可以模仿数据库路由一般

对于使用缓存框架middleware网站缓存,您必须在settings.py中指定缓存的名称,例如:

CACHE_MIDDLEWARE_ALIAS = "my_cache_alias"

对于页面缓存,您可以在装饰器中手动指定缓存的名称,例如:

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

我不确定缓存路由对于网站和页面缓存是否真的有意义所以我对它的设计方式没有任何问题。

现在,对于您使用MySQL作为数据库缓存后端的情况,您可以根据database caching上的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部分看到的那样),除了它返回缓存别名而不是db别名。

答案 1 :(得分: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

中查看详细信息