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

问题描述 投票:4回答:2

所以我想在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路由器?

谢谢

django memcached django-cache
2个回答
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 docs部分进行设置并制作路由器。例如,这将是您的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别名。


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

© www.soinside.com 2019 - 2024. All rights reserved.