Stratégie de cache Redis : clés, TTL, invalidation et stampede

Définissez quoi mettre en cache dans Redis et comment : modèle par type de donnée, nommage des clés, TTL avec jitter, invalidation, protection anti-stampede, politique mémoire et code d’exemple. Conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Il comprend 4 variables personnalisables et vous pouvez le copier gratuitement en un clic.

Avancé · Code · En attente de relecture éditoriale

Prompt

Agis comme un architecte backend spécialisé dans la performance et le cache avec Redis.

Contexte :
- Application et stack : {{application}}
- Données candidates au cache et leur profil de lecture et d’écriture : {{donnees}}
- Tolérance aux données périmées : {{tolerance}}
- Problème actuel : {{probleme}}

Livrables :
1. Quoi mettre en cache ou non : un tableau avec chaque donnée, le ratio lecture/écriture estimé (ou [À COMPLÉTER] si je ne le connais pas), le coût de recalcul et la décision.
2. Le modèle retenu pour chaque donnée (cache-aside, read-through, write-through ou write-behind) et pourquoi.
3. Le schéma des clés : convention de nommage, préfixe de version pour invalider en masse, et comment éviter une croissance illimitée des clés.
4. Les TTL par type de donnée, avec du jitter pour qu’elles n’expirent pas toutes en même temps.
5. L’invalidation : quels événements suppriment ou mettent à jour chaque clé, comment éviter les conditions de course entre l’écriture en base et en cache, et que faire si l’invalidation échoue.
6. La protection contre le cache stampede : verrou avec `SET NX` et expiration, rafraîchissement anticipé probabiliste ou service d’une donnée périmée pendant le recalcul.
7. La configuration de Redis : `maxmemory`, politique d’éviction adaptée, sérialisation et taille maximale des valeurs.
8. Le comportement si Redis ne répond plus : timeouts courts, repli sur la base de données et protection de celle-ci contre la surcharge.
9. Les métriques à suivre (taux de succès, latence, évictions, mémoire) et un plan de déploiement progressif.
10. Un code d’exemple dans ma stack pour le cas principal, protection anti-stampede comprise.

Contraintes :
- Ne donne pas de gains chiffrés inventés ; explique comment les mesurer avant et après.
- S’il manque des informations sur les volumes ou la cohérence, demande-les avant de recommander.
- Signale les données qui ne doivent jamais être mises en cache de façon partagée (par exemple les données personnelles d’un autre utilisateur).

Comment l'utiliser

  1. Listez les endpoints ou requêtes les plus lents ou les plus appelés et la fréquence de changement de leurs données.
  2. Indiquez combien de temps chaque donnée peut rester périmée sans poser problème.
  3. Déployez d’abord le cache sur un seul cas, mesurez le taux de succès, puis étendez.

Exemple d'utilisation

App : boutique Laravel sous PHP 8.3 · Données : catalogue (change quelques fois par jour) et stock (change chaque minute) · Problème : la page catégorie met 1,8 s en pointe.

Exemple de résultat

1. Que mettre en cache

DonnéeLecture/écritureDécision
Catalogue par catégorieTrès élevée / quelques-unes par jourCache-aside, TTL ~10 min
StockÉlevée / chaque minuteTTL 30 s ou lecture MySQL
PanierPar utilisateurClé par utilisateur, jamais partagée
Prix au paiement—Pas de cache : toujours depuis MySQL

10. Code : catalogue avec protection anti-stampede

public function produitsDeCategorie(int $categorieId): array
{
    $version = Cache::get('catalogue:version', 1);      // l’incrémenter invalide tout le catalogue
    $cle = "v{$version}:categorie:{$categorieId}:produits";
    $ttl = 600 - random_int(0, 60);                      // jitter pour étaler les expirations

    if (($enCache = Cache::get($cle)) !== null) {
        return $enCache;
    }

    // Un seul processus recalcule ; les autres attendent jusqu’à 3 s
    return Cache::lock("lock:{$cle}", 10)->block(3, fn () =>
        Cache::remember($cle, $ttl, fn () => Product::query()
            ->where('category_id', $categorieId)
            ->where('active', true)
            ->get(['id', 'name', 'slug', 'image'])
            ->toArray())
    );
}

Si block() lève LockTimeoutException, servez la dernière copie ou interrogez MySQL avec une limite de concurrence. Mesurez le taux de hit et la latence p95 de la page avant et après le déploiement…

Informations clés

Catégorie
Programmation et développement · Architecture logicielle
Type de résultat
Code
Niveau
Avancé
Conçu pour
ChatGPT, Claude, Gemini et Microsoft Copilot
Vérifié sur
En attente de vérification éditoriale
Variables
Application et stack, Données et profil d’accès, Tolérance aux données périmées et Problème actuel
Langue
Français
Prix
Gratuit, sans inscription
Mis à jour
07/11/2026

Questions fréquentes

Qu’est-ce qu’un cache stampede ?

Quand une clé très sollicitée expire, des centaines de requêtes tentent de la recalculer en même temps et saturent la base. Un verrou pour qu’une seule la régénère, ou un rafraîchissement avant expiration, l’évite.

Pourquoi ajouter du jitter aux TTL ?

Des clés créées ensemble avec le même TTL expirent ensemble et provoquent un pic de charge. Un léger décalage aléatoire étale ces expirations.

Quelle politique d’éviction choisir dans Redis ?

Si Redis ne sert que de cache, allkeys-lru ou allkeys-lfu conviennent souvent. S’il partage l’instance avec des données à ne pas perdre, comme des files, séparez-les sur une autre instance.

À quoi sert ce prompt ?

Définissez quoi mettre en cache dans Redis et comment : modèle par type de donnée, nommage des clés, TTL avec jitter, invalidation, protection anti-stampede, politique mémoire et code d’exemple.

Avec quels outils d'IA fonctionne-t-il ?

Il est conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.

Comment personnaliser le prompt ?

Cliquez sur « Personnaliser » et remplissez les variables (Application et stack, Données et profil d’accès, Tolérance aux données périmées et Problème actuel). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.

Faut-il de l'expérience pour l'utiliser ?

Il est de niveau avancé : il s'adresse aux personnes expérimentées dans le domaine, capables d'évaluer et d'ajuster le résultat.

Ce prompt est-il gratuit ?

Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.

Puis-je me fier au résultat de l'IA ?

Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.

Prompts similaires