Caching
Le caching (mise en cache) est une technique d’optimisation qui consiste à stocker temporairement des données pour éviter de recalculer ou de récupérer les mêmes informations à chaque requête.
-
Objectif : accélérer les réponses et réduire la charge serveur.
-
Stockage possible : mémoire vive, disque, ou services dédiés comme Redis, Memcached.
Principe de fonctionnement
-
L’utilisateur demande une donnée.
-
Le système vérifie si la donnée est dans le cache :
-
✅ Oui → retourne le résultat immédiatement.
-
❌ Non → calcule/récupère la donnée → stocke-la dans le cache → retourne le résultat.
-
-
La donnée peut avoir un TTL (Time To Live) après lequel elle est supprimée ou mise à jour.
Types de cache
Type | Description | Exemple |
---|---|---|
Cache mémoire | Très rapide, stocke les données directement en RAM | functools.lru_cache (Python) |
Cache disque | Plus lent mais persistant | Fichiers temporaires |
Cache distribué | Partagé entre plusieurs serveurs | Redis, Memcached |
Cache navigateur | Stocke côté client les fichiers statiques | HTML, CSS, JS, images |
Cache CDN | Contenu statique proche de l’utilisateur | Cloudflare, Akamai |
Avantages
-
Gain de performance significatif.
-
Réduction de la charge sur les bases de données ou les API externes.
-
Meilleure expérience utilisateur grâce à un temps de réponse rapide.
-
Scalabilité facilitée pour les applications web ou IA.
Limites
-
Données obsolètes si le cache n’est pas mis à jour correctement.
-
Consommation mémoire si trop de données sont mises en cache.
-
Complexité de gestion : expiration, invalidation, synchronisation entre serveurs.
Cas d’utilisation
-
Sites web : pages ou résultats de recherche fréquents.
-
IA : stocker des prédictions coûteuses.
-
API : éviter de recalculer ou de faire des requêtes répétitives.
-
Big Data : stocker les résultats d’agrégations lourdes.
Fonctions :
-
Caching (exemple)
Exemple de code :
from flask import Flask from flask_caching import Cache import time app = Flask(__name__) # Configuration du cache (ici, simple mémoire) app.config['CACHE_TYPE'] = 'SimpleCache' app.config['CACHE_DEFAULT_TIMEOUT'] = 10 # 10 secondes cache = Cache(app) # Route avec cache @app.route('/slow') @cache.cached() def slow_response(): time.sleep(5) # Simule un traitement long return "Réponse calculée après un long traitement" # Route normale sans cache @app.route('/fast') def fast_response(): return "Réponse instantanée" if __name__ == "__main__": app.run(debug=True)
Explication du code :
from flask import Flask
importe la classe Flask pour créer l’application web.from flask_caching import Cache
importe la classe Cache qui permet de gérer le **caching** (mise en cache des réponses ou données).import time
importe le module time pour simuler un traitement long avectime.sleep()
.Créer l’application Flask
app = Flask(__name__)
crée une instance de l’application Flask.Configurer le cache
app.config['CACHE_TYPE'] = 'SimpleCache'
définit le type de cache. Ici, SimpleCache stocke les données en mémoire.app.config['CACHE_DEFAULT_TIMEOUT'] = 10
définit le délai (en secondes) pendant lequel les données mises en cache restent valides.Initialiser l’objet Cache
cache = Cache(app)
crée une instance de Cache et l’associe à l’application Flask.Définir une route avec cache
@app.route('/slow')
crée une route accessible à /slow.@cache.cached()
applique le cache à cette route. La première requête exécutera le traitement complet, puis le résultat sera stocké.time.sleep(5)
simule un traitement long (5 secondes).return "Réponse calculée après un long traitement"
renvoie la réponse qui sera mise en cache.Définir une route sans cache
@app.route('/fast')
crée une route accessible à /fast.
return "Réponse instantanée"
renvoie une réponse immédiate, non mise en cache.Lancer l’application Flask
if __name__ == "__main__":
vérifie que le fichier est exécuté directement.
app.run(debug=True)
démarre le serveur Flask en mode debug, permettant le rechargement automatique du code et l’affichage des erreurs détaillées.