4

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

谢谢

4

2 回答 2

3

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

对于使用缓存框架中间件的站点缓存,您必须在 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 路由器完全相同(正如您应该能够从有关数据库缓存和多个数据库的文档部分中看到的那样),不同之处在于它返回缓存别名而不是数据库别名。

于 2011-05-10T21:10:53.003 回答
0

例如

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 的缓存框架中查看详细信息(部分Accessing the cache:)

于 2018-03-01T04:02:00.010 回答