Cet article concerne la prévention et la solution de la pénétration du cache et de l'échec du cache de Redis. Il a une certaine valeur de référence. Les amis intéressés peuvent en apprendre davantage.
Pénétration du cache :
Comprendre
La pénétration du cache fait référence à l'interrogation d'une donnée qui ne doit pas exister en raison du cache Lorsqu'il y a est un échec, il doit être interrogé à partir de la base de données. Si les données ne peuvent pas être trouvées, elles ne seront pas écrites dans le cache. Cela entraînera l'interrogation des données inexistantes dans la base de données à chaque fois qu'elles seront demandées. pénétration du cache.
Solution :
Stockez tous les paramètres de requête possibles sous forme de hachage, vérifiez-les d'abord au niveau de la couche de contrôle et supprimez-les s'ils ne correspondent pas. La plus courante consiste à utiliser des filtres Bloom pour hacher toutes les données possibles dans un bitmap suffisamment grand. Les données qui ne doivent pas exister seront interceptées par ce bitmap, évitant ainsi d'endommager le système de stockage sous-jacent.
Vous pouvez également utiliser une méthode plus simple et plus grossière. Si les données renvoyées par une requête sont vides (que les données n'existent pas ou que le système tombe en panne), nous mettrons toujours en cache le résultat vide, mais ce sera le cas. expirera. Il sera court, pas plus de cinq minutes.
Avalanche de cache
Reconnaissance
Si le cache est concentré dans une période de temps, un grand nombre de pénétrations de cache se produit, toutes les requêtes ont atterri sur la base de données, provoquant une avalanche de cache.
Il n'existe pas de solution parfaite à ce problème, mais vous pouvez analyser le comportement des utilisateurs et essayer de répartir uniformément les points temporels de défaillance. La plupart des concepteurs de systèmes envisagent d'utiliser des verrous ou des files d'attente pour garantir des écritures monothread (processus) dans le cache, empêchant ainsi qu'un grand nombre de requêtes simultanées ne tombent sur le système de stockage sous-jacent en cas de panne.
Solution
Après l'expiration du cache, contrôlez le nombre de threads qui lisent la base de données et écrivent dans le cache via le verrouillage ou la mise en file d'attente. Par exemple, un seul thread est autorisé à interroger les données et à écrire dans le cache pour une certaine clé, tandis que les autres threads attendent.
Vous pouvez utiliser le mécanisme de rechargement du cache pour mettre à jour le cache à l'avance, puis déclencher manuellement le chargement du cache avant qu'un accès simultané important ne se produise.
Différentes clés peuvent définir différents délais d'expiration. rendre le cache invalide. Essayez de faire une mise en cache secondaire de manière uniforme
, ou une stratégie de double cache. A1 est le cache d'origine et A2 est le cache de copie. Lorsque A1 expire, A2 est accessible. Le délai d'expiration du cache de A1 est défini sur court terme et A2 est défini sur long terme.
Tutoriels associés : Tutoriel vidéo Redis
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!