# ¿Qué es Django `LocMemCache` (caché de memoria local)? ![Imagen del almacén de datos de los robots](/media/editor_temp/6/62743df3-4837-47d2-b16a-a458240f5629.png) `LocMemCache` es el **backend de caché de memoria local** que ofrece Django. Si no configuras un caché externo, Django utiliza este caché local por defecto. Su estructura sencilla lo hace ideal para aplicaciones sin compartir memoria, para operar de forma rápida y sencilla, o para probar rápidamente en un servidor de desarrollo antes de configurar Redis. **Resumen de características** * **Ubicación de almacenamiento:** RAM del **proceso de Django en ejecución** * **Alcance de compartición:** **No se comparte fuera del proceso (per‑process)** * **Característica:** **thread‑safe** --- ## ¿Qué problema resuelve? {#sec-d5ce9d49504b} La caché sirve para almacenar temporalmente resultados que son costosos de calcular o consultar, y reutilizarlos en solicitudes posteriores. Por ejemplo, si colocas en caché un valor que se consulta frecuentemente en la base de datos: * Primera solicitud: consulta a la BD → se guarda el resultado en caché * Solicitudes siguientes: se devuelve inmediatamente desde la caché (rápido) `LocMemCache` guarda esta caché **sin sistemas externos (Redis/Memcached, etc.)** directamente en la **memoria del proceso**. --- ## Tres aspectos clave del funcionamiento {#sec-5812aa71ede8} ### 1) Es una caché **por proceso** (lo más importante) {#sec-82e1553d2867} La documentación de Django lo indica claramente: la caché de memoria local es **per‑process**. Es decir, * Si tienes 4 workers de Gunicorn → **4 cachés** * Si tienes 2 servidores → **cada servidor tiene su propia caché** Por lo tanto, **no se comparte la caché entre procesos o servidores**. ### 2) Es **thread‑safe** {#sec-b592565e73f5} Está diseñada para que varios hilos dentro del mismo proceso accedan de forma segura. ### 3) Se borra al reiniciar el proceso {#sec-56535f9324da} Al estar solo en memoria, al reiniciar el proceso la caché se inicializa de nuevo. --- ## Cómo configurarlo {#sec-ed6e3fa738df} En `settings.py` define `CACHES` con el `BACKEND` correspondiente. ```python CACHES = { "default": { "BACKEND": "django.core.cache.backends.locmem.LocMemCache", "LOCATION": "unique-snowflake", } } ``` El ejemplo de la documentación es el anterior; `LOCATION` actúa como identificador para distinguir instancias de caché. --- ## Ventajas {#sec-38c232e71484} * **Poca configuración**: no necesitas levantar un servidor de caché externo * **Rápido**: acceso a la memoria del mismo proceso reduce la latencia * **Práctico para desarrollo/pruebas**: ideal para “probar la idea de caché” sin dependencias externas --- ## Desventajas y precauciones {#sec-070a65a9d9f5} * **Fragmentación en entornos multi‑proceso/multi‑servidor** → puede parecer que la caché no funciona * **Dificultad de predicción en producción**: al distribuir el tráfico entre varios procesos la tasa de aciertos puede bajar * **No recomendado como almacenamiento de sesiones**: la documentación de sesiones de Django advierte que la caché local no persiste y no es segura en entornos multi‑proceso --- ## Cuándo usarlo {#sec-99e7489ed70c} * Entorno de desarrollo local * Un solo proceso (o tareas que no requieren compartir caché) * Validación de funcionalidades / pruebas con mínima dependencia externa En cambio, si necesitas **que varios procesos o servidores compartan la misma caché**, es más habitual optar por Redis o Memcached.