【问题标题】:Django multiple caching BACKEND routers howto?Django 多个缓存 BACKEND 路由器如何?
【发布时间】:2011-03-07 07:48:40
【问题描述】:

所以我想在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


    【解决方案1】:

    我不相信 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 的文档部分中看到),但它返回的是缓存别名而不是数据库别名。

    【讨论】:

      【解决方案2】:

      例如

      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(section:Accessing the cache)看到

      【讨论】:

        猜你喜欢
        • 2020-06-01
        • 2018-07-03
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 2014-04-08
        • 1970-01-01
        • 2020-11-08
        • 1970-01-01
        相关资源
        最近更新 更多