Django несколько кэширующих BACKEND роутеров Howto? - PullRequest
4 голосов
/ 07 марта 2011

Итак, я хочу кэшировать некоторые данные в 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 ]

3 голосов
/ 11 мая 2011

Я не верю, что структура кэша Django может имитировать маршрутизацию в БД в целом .

Для кэша сайта с использованием структуры кэша связующего ПО вы должны указать имя кэша в settings.py, например:

CACHE_MIDDLEWARE_ALIAS = "my_cache_alias"

Для страницы кэша вы можете вручную указать имя кэша в декораторе,Например:

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

Я не уверен, что маршрутизация кэша действительно имеет смысл для кэширования сайтов и страниц, поэтому у меня нет проблем с тем, как это спроектировано.

Теперь, дляВ вашем случае, когда вы используете MySQL в качестве бэкэнда кэша базы данных, вы можете настроить его и создать маршрутизатор в соответствии с разделом 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.

0 голосов
/ 01 марта 2018

например

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')

Вы можете увидеть детали в Джангоструктура кэша (раздел: Accessing the cache)

...