# Qu’est‑ce que le cache `LocMemCache` de Django ? ![Image d’un entrepôt de données de robots](/media/editor_temp/6/62743df3-4837-47d2-b16a-a458240f5629.png) `LocMemCache` est le **backend de cache en mémoire locale** fourni par Django. Si aucune configuration de cache n’est définie, Django utilise ce cache local par défaut. Il est souvent employé dans des applications à structure relativement simple, pour un fonctionnement rapide et autonome sans partage de mémoire, ou pour tester rapidement un serveur de développement avant de mettre en place Redis. **Résumé des caractéristiques** * **Emplacement de stockage** : RAM du **processus Django en cours d’exécution** * **Portée de partage** : **Non partagé hors du processus (per‑process)** * **Spécificité** : **Thread‑safe** --- ## Quel problème résout‑il ? Le cache sert à conserver temporairement les résultats de calculs ou de requêtes coûteuses afin de les réutiliser lors des requêtes suivantes. Par exemple, si vous mettez dans le cache une valeur fréquemment lue depuis la base de données : * Première requête : lecture de la BD → stockage du résultat dans le cache * Requêtes suivantes : retour immédiat depuis le cache (rapide) `LocMemCache` stocke ce cache **directement dans la mémoire du processus** sans recourir à un système externe (Redis, Memcached, etc.). --- ## Trois points clés du fonctionnement ### 1) Cache **par processus** (le plus important) La documentation de Django précise que le cache en mémoire locale est **per‑process**. Ainsi : * 4 workers Gunicorn → **4 caches** distincts * 2 serveurs → **un cache par serveur** Il n’est donc pas possible de partager le cache entre processus ou serveurs. ### 2) **Thread‑safe** Il est conçu pour être sûr même lorsqu’un même processus est accédé simultanément par plusieurs threads. ### 3) Le cache disparaît au redémarrage Étant stocké uniquement en mémoire, le cache est réinitialisé à chaque redémarrage du processus. --- ## Comment le configurer Dans `settings.py`, définissez `CACHES` avec le backend approprié. ```python CACHES = { "default": { "BACKEND": "django.core.cache.backends.locmem.LocMemCache", "LOCATION": "unique-snowflake", } } ``` L’exemple officiel utilise cette structure ; `LOCATION` sert d’identifiant pour distinguer les instances de cache. --- ## Avantages * **Configuration minimale** : pas besoin de lancer un serveur de cache externe * **Rapidité** : accès à la mémoire du même processus, faible latence * **Pratique pour le développement / les tests** : idéal pour expérimenter le concept de cache sans dépendances externes --- ## Inconvénients et précautions * **Cache fragmenté en multi‑processus / multi‑serveurs** → peut donner l’impression que le cache ne fonctionne pas * **Difficulté de prévision en production** : la répartition du trafic sur plusieurs processus peut réduire le taux de hit * **Pas recommandé comme stockage de session** : la documentation de Django avertit que le cache en mémoire locale n’est pas durable et n’est pas sûr en multi‑processus --- ## Quand l’utiliser * Environnement de développement local * Un seul processus (ou lorsqu’aucun partage de cache n’est requis) * Vérification de fonctionnalités / tests (réduction des dépendances externes) En revanche, si vous avez besoin de **partager le même cache entre plusieurs processus ou serveurs**, il est généralement préférable d’envisager Redis ou Memcached.