Django 多个缓存后端路由器如何?

der*_*evo 5 django memcached django-cache

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

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

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用多数据库结构,并且我知道如何编写多数据库路由器。

在设置.py

DATABASE_ROUTERS = ['oceankeys.dbrouter.SphinxRouter','oceankeys.dbrouter.DefaultDbRouter']
Run Code Online (Sandbox Code Playgroud)

有人知道如何让Django 缓存 BACKEND路由器吗?

谢谢

Van*_*ale 3

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

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

CACHE_MIDDLEWARE_ALIAS = "my_cache_alias"
Run Code Online (Sandbox Code Playgroud)

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

@cache_page(60 * 15, cache="my_cache_alias")
    def my_view(request):
    ...
Run Code Online (Sandbox Code Playgroud)

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

现在,对于使用 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',
    }
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个路由器来标识哪个缓存后端用于哪个模型。它的外观和工作方式与数据库路由器完全相同(您应该能够从有关数据库缓存和多个数据库的文档部分中看到),但它返回缓存别名而不是数据库别名。