Django: CACHE KEY_PREFIX

Una rápida para acabar el día, después de ponerme a leer la documentación de django.contrib.sitemaps y ver, por enésima vez, que reinventar la rueda es MAL, quise jugar otro poco con Memcached, porque tenía un issue bastante curioso.

Con instancias distintas del mismo software (Django) ejecutando varias páginas, todas contra Memcached, las caches se iban solapando de una forma muy divertida. Por ejemplo en la página index (/), la que primero cargaba y guardaba sus datos en memcache, sobreescribía a las demás y todas ofrecían el mismo contenido. Lo mismo con el resto de páginas con url coincidente.

Viendo el comportamiento la solución era sencilla, implementar KEY_PREFIX y que cada instsancia tuviera su propia "despensa de datos". Lo que en principio parecía trivial al final se convirtió en varias pruebas porque la documentación no está del todo clara (al menos para mí).

Después de varias pruebas, la configuración que ha funcionado adecuadamente ha sido la siguiente, en el archivo settings.py de cada instancia:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'KEY_PREFIX': 'your-custom-prefix_',
    }
}

Con cambiar la variable de configuración KEY_PREFIX dentro de la sección CACHES es suficiente, pero fuera de aquí no funcionará, como tampoco lo harán CACHE_PREFIX, CACHE_KEY_PREFIX ni CACHE_MIDDLEWARE_KEY_PREFIX, al menos no en mi entorno, por eso me hizo perder más tiempo del esperado. Así que ahí queda escrito, por si pudiera interesar.

django code

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.
blog comments powered by Disqus