Maison > base de données > Redis > Parlons de la pénétration du cache, de l'avalanche de cache, de la panne du cache et de la cohérence du cache dans Redis

Parlons de la pénétration du cache, de l'avalanche de cache, de la panne du cache et de la cohérence du cache dans Redis

青灯夜游
Libérer: 2021-11-26 17:18:52
avant
2085 Les gens l'ont consulté

Cet article vous donnera une brève compréhension de la pénétration du cache, de l'avalanche de cache, de la panne du cache et de la cohérence du cache dans Redis, et présentera les solutions pour la pénétration du cache et l'avalanche de cache. J'espère qu'il sera utile à tout le monde !

Parlons de la pénétration du cache, de l'avalanche de cache, de la panne du cache et de la cohérence du cache dans Redis

Avalanche de cache

Le cache échoue dans une grande zone en même temps, et les requêtes ultérieures tomberont sur la base de données, ce qui empêchera la base de données de résister à un grand nombre de requêtes dans un court laps de temps et effondrement

Par exemple, sur la page d'accueil du commerce électronique, le délai d'expiration des clés de toutes les pages d'accueil est de 12 heures, actualisé à midi s'il y a un événement de vente flash à 0h00 et qu'un grand nombre d'utilisateurs affluent. , mais toutes les clés du cache sont invalides à ce moment-là, toutes les requêtes tomberont sur la base de données. Si la base de données ne peut pas la gérer, elle sera directement bloquée. Ou si Redis est en panne, un grand nombre de requêtes tomberont sur MySQL. ce qui le fait raccrocher. [Recommandations associées : Tutoriel vidéo Redis]

Solution

  • Donc, dans ce cas, vous devez ajouter une valeur aléatoire au délai d'expiration de chaque clé pour éviter un grand nombre de pannes de clé en même temps. est un déploiement de cluster Redis, les données de hotspot peuvent être distribuées à différentes bibliothèques.

  • Au préalable : essayez d'assurer la haute disponibilité du cluster redis, rattrapez les temps d'arrêt de la machine au plus vite et choisissez une stratégie d'élimination de mémoire appropriée

  • En cours : cache ehcache local + limitation de courant hystrix et rétrogradation pour éviter un crash de mysql

  • Après : Les données enregistrées par le mécanisme de persistance redis sont restaurées dans le cache dès que possible.

Pénétration du cache

Un grand nombre de clés demandées n'existent pas dans le cache. Par exemple, un pirate informatique crée une clé qui n'existe pas dans le cache et initie un grand nombre de requêtes, provoquant un grand nombre de requêtes. tomber dans la base de données.

Solution

  • Tout d'abord, vous devez effectuer une vérification de base des paramètres d'entrée et intercepter directement les paramètres illégaux. Par exemple, interroger l'ID de la base de données ne peut pas être inférieur à 0, vérifier le format de l'e-mail, etc.

  • Si les deux. le cache et la base de données sont introuvables. Si les données d'une certaine clé sont introuvables, la clé est écrite dans redis, la valeur est nulle et le délai d'expiration est défini pour éviter que la prochaine requête ne tombe sur la base de données.

  • Grâce au filtre Bloom, le filtre Bloom peut très facilement déterminer si une donnée donnée existe dans des données massives. Toutes les valeurs demandées possibles peuvent être stockées dans le filtre Bloom, et lorsque la demande arrive, déterminez d'abord si la demande a été envoyée. par l'utilisateur existe dans le filtre Bloom, et l'intercepter directement s'il n'existe pas.

Panne du cache

La panne du cache fait référence à un point d'accès clé, qui transporte constamment une grande simultanéité se concentre sur l'accès à ce point. Lorsque la clé échoue, la grande simultanéité continue traverse le cache et demande directement au. base de données

Cohérence du cache

Si une cohérence forte est requise, le cache ne peut pas être utilisé, car une cohérence forte ne peut pas être garantie, seulement une cohérence éventuelle.

  • Supprimez d'abord le cache, puis mettez à jour la base de données

Si la mise à jour de la base de données échoue, la base de données contient toujours d'anciennes données, redis est vide et les données ne seront pas incohérentes. Si elle est vide, elle disparaîtra. à la base de données pour la requête, puis mettez à jour vers le cache.

  • Rejoignez la file d'attente et effectuez des opérations de sérialisation

Supprimez d'abord le cache, puis mettez à jour la base de données. Des problèmes peuvent également survenir dans des scénarios à forte concurrence, tels que la suppression du cache et la non-mise à jour de la base de données pour le moment. in et finds Si redis est vide, il lira la base de données puis la mettra à jour vers redis. À ce moment, si le thread mis en cache est supprimé puis que la base de données est mise à jour, les données de la base de données et de redis seront incohérentes. l'opération de mise à jour des données peut être mise en file d'attente et sérialisée. L'opération n'aura pas lieu, mais elle n'est généralement pas recommandée car elle réduirait l'efficacité.

Pour plus de connaissances sur la programmation, veuillez visiter : Introduction à la programmation ! !

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!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal