2011-05-10 23 views
17

Necesito usar memcached y caché basada en archivos. configuración que mi caché en la configuración:¿Cómo usar 2 backends de caché diferentes en Django?

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 
     'LOCATION': 'c:/foo/bar', 
    }, 
    'inmem': { 
     'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 
    } 
} 

ficticia es temporal. Docs dice:

cache.set('my_key', 'hello, world!', 30) 
cache.get('my_key') 

bien, pero ¿cómo puede ahora establecer y obtener caché sólo para 'inmem' back-end caché (en el futuro memcached)? La documentación no menciona cómo hacer eso.

Respuesta

25
CACHES = { 
    'default': { 
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 
    'LOCATION': 'c:/foo/bar', 
    }, 
    'inmem': { 
    'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 
    } 
} 

from django.core.cache import get_cache, cache 
inmem_cache = get_cache('inmem') 
default_cache = get_cache('default') 
# default_cache == cache 
+1

Esta respuesta debe ser actualizada –

-2

Desafortunadamente, no puede cambiar qué alias de caché se usa para los métodos de bajo nivel cache.set() y cache.get().

Estos métodos utilizan siempre caché 'por defecto' de acuerdo con la línea 51 (en Django 1.3) de django.core.cache.__init__.py:

DEFAULT_CACHE_ALIAS = 'default' 

por lo que necesita para establecer su caché 'por defecto' a la caché que desea utilizar para el caché de bajo nivel y luego use los otros alias para cosas como el caché del sitio, el caché de página y el enrutamiento del caché de db. `

2

Además de la respuesta de los romanos por encima ... También puede importar de forma condicional un caché por su nombre, y utilizar el valor por defecto (o cualquier otra caché) si el solicitado no existe.

from django.core.cache import cache as default_cache, get_cache 
from django.core.cache.backends.base import InvalidCacheBackendError 

try: 
    cache = get_cache('foo-cache') 
except InvalidCacheBackendError: 
    cache = default_cache 

cache.get('foo') 
7

Desde Django 1.9, get_cache está en desuso. Haga lo siguiente para direccionar las claves de 'inmem' (además de la respuesta de Romans):

from django.core.cache import caches 
caches['inmem'].get(key) 
Cuestiones relacionadas