Maison  >  Article  >  base de données  >  Que dois-je faire si une exception de cache Redis se produit ? Comment le résoudre ?

Que dois-je faire si une exception de cache Redis se produit ? Comment le résoudre ?

青灯夜游
青灯夜游avant
2021-12-17 10:17:462507parcourir

Que dois-je faire s'il y a une exception de cache Redis ? L'article suivant vous présentera les exceptions et solutions du cache Redis. J'espère qu'il vous sera utile ! Avalanche de cache courte période de temps et effondrement. [Recommandations associées :

Tutoriel vidéo Redis

]Que dois-je faire si une exception de cache Redis se produit ? Comment le résoudre ?

Solution

1 Définissez le délai d'expiration des données mises en cache de manière aléatoire pour empêcher un grand nombre de données d'expirer en même temps.

2. Généralement, lorsque le degré de concurrence n'est pas particulièrement important, la solution la plus couramment utilisée est le verrouillage et la mise en file d'attente.

3. Ajoutez une balise de cache correspondante à chaque donnée mise en cache et enregistrez si la balise de cache est invalide, mettez à jour le cache de données. Pénétration du cache

La pénétration du cache fait référence aux données qui ne sont ni dans le cache ni dans la base de données, ce qui fait que toutes les requêtes tombent sur la base de données, ce qui oblige la base de données à résister à un grand nombre de requêtes dans un court laps de temps et effondrement.

Solution

1. Ajoutez une vérification au niveau de la couche d'interface, telle que la vérification de l'authentification de l'utilisateur, la vérification de base de l'identifiant et l'interception directe de l'identifiant<=0; , il n'est pas récupéré de la base de données à ce stade, la paire clé-valeur peut également être écrite comme clé-nulle. La durée de validité du cache peut être définie plus courte, par exemple 30 secondes (une valeur trop longue la rendra inutilisable. dans des circonstances normales). Cela peut empêcher les utilisateurs attaquants d'utiliser à plusieurs reprises le même identifiant pour des attaques par force brute ;

3. Utilisez un filtre Bloom pour hacher toutes les données possibles dans un bitmap suffisamment grand. Les données qui ne doivent pas exister seront ainsi interceptées par ce bitmap. évitant la pression des requêtes sur le système de stockage sous-jacent.

Un

supplémentaire a atteint un niveau extrême d'utilisation de l'espace, c'est-à-dire Bitmap et Bloom Filter.

Bitmap

 : La table de hachage typique est la table de hachage

L'inconvénient est que Bitmap ne peut enregistrer qu'un seul bit d'information pour chaque élément. Si vous souhaitez remplir des fonctions supplémentaires, je crains que vous ne puissiez le faire qu'en sacrifiant davantage. l'espace et le temps.

Filtre Bloom (recommandé)

introduit des fonctions de hachage indépendantes k(k>1)k(k>1) pour garantir que les éléments sont complétés dans un espace et un taux d'erreur de jugement donnés. Le processus de jugement.

Son avantage est que l'efficacité spatiale et le temps de requête sont bien supérieurs à l'algorithme général. Son inconvénient est qu'il présente un certain taux de mauvaise reconnaissance et des difficultés de suppression.

L'idée principale de l'algorithme Bloom-Filter est d'utiliser plusieurs fonctions de hachage différentes pour résoudre les « conflits ».

Hash a un problème de conflit (collision), et les valeurs de deux URL obtenues en utilisant le même Hash peuvent être les mêmes. Afin de réduire les conflits, nous pouvons introduire plusieurs valeurs de hachage supplémentaires. Si nous concluons à partir de l'une des valeurs de hachage qu'un élément n'est pas dans l'ensemble, alors l'élément n'est certainement pas dans l'ensemble. Ce n'est que lorsque toutes les fonctions de hachage nous indiquent que l'élément est dans l'ensemble que nous pouvons être sûrs que l'élément existe dans l'ensemble. C'est l'idée de base de Bloom-Filter.

Bloom-Filter est généralement utilisé pour déterminer si un élément existe dans un grand ensemble de données.

Panne du cache

La panne du cache fait référence aux données qui ne sont pas dans le cache mais dans la base de données (généralement lorsque la durée du cache expire). À ce stade, en raison du grand nombre d'utilisateurs simultanés, les données ne le sont pas). lire dans le cache en même temps et les données ne sont pas lues dans le cache en même temps. Accéder à la base de données pour récupérer des données entraînera une augmentation instantanée de la pression sur la base de données, provoquant une pression excessive. Contrairement à l'avalanche de cache, la panne du cache fait référence à une requête simultanée des mêmes données. L'avalanche de cache signifie que différentes données ont expiré et qu'un grand nombre de données sont introuvables, la base de données est donc recherchée.

Solution

1. Définir les données du point d'accès pour qu'elles n'expirent jamais

2 Ajouter un verrouillage mutex, un verrouillage mutex

Préchauffage du cacheLe préchauffage du cache signifie qu'une fois le système mis en ligne, les données du cache pertinentes sont chargé directement dans le système de cache. De cette façon, vous pouvez éviter le problème d’interroger d’abord la base de données, puis de mettre les données en cache lorsque l’utilisateur le demande ! Les utilisateurs interrogent directement les données mises en cache qui ont été préchauffées !

Solution

1. Écrivez directement une page d'actualisation du cache et faites-la manuellement lors de la connexion

2. La quantité de données n'est pas importante et peut être automatiquement chargée au démarrage du projet ; cache régulièrement ;

Rétrogradation du cache

Lorsque le trafic augmente fortement, que des problèmes de service surviennent (tels qu'un temps de réponse lent ou aucune réponse) ou que des services non essentiels affectent les performances des processus principaux, il est toujours nécessaire de s'assurer que le service est toujours disponible, même s'il est endommagé. Servez. Le système peut automatiquement rétrograder en fonction de certaines données clés, ou configurer des commutateurs pour réaliser une rétrogradation manuelle.

Le but ultime de la rétrogradation du cache est de garantir que les services de base sont disponibles, même s'ils entraînent des pertes. Et certains services ne peuvent pas être rétrogradés (comme l'ajout au panier, le paiement).

Avant de déclasser, vous devez trier le système pour voir si le système peut perdre des soldats et conserver des commandants ; triant ainsi ce qui doit être protégé jusqu'à la mort et ce qui peut être déclassé, par exemple, vous pouvez vous référer au niveau de journal ; plan de pose :

1. Général : par exemple, certains services expirent occasionnellement en raison d'une instabilité du réseau ou lorsque le service est en ligne, et peuvent être automatiquement rétrogradés ;

2 Avertissement : certains services ont des taux de réussite fluctuants au cours d'une période donnée ; entre 95 et 100 %). Il peut être rétrogradé automatiquement ou manuellement, et une alarme peut être envoyée 

3. Erreur : par exemple, le taux de disponibilité est inférieur à 90 %, ou le pool de connexions à la base de données est explosé, ou le nombre de visites augmente soudainement jusqu'au seuil maximum que le système peut supporter. Cela peut être automatiquement déclassé ou manuellement en fonction de la situation

4 Erreurs graves : par exemple, si les données sont erronées pour des raisons particulières, Un déclassement manuel d’urgence est requis.

Le but de la rétrogradation du service est d'empêcher une défaillance du service Redis de provoquer des problèmes d'avalanche dans la base de données. Par conséquent, pour les données mises en cache sans importance, une stratégie de rétrogradation du service peut être adoptée. Par exemple, une approche courante consiste à renvoyer directement la valeur par défaut à l'utilisateur en cas de problème avec Redis.

Clé du hotspot du cache

Une clé dans le cache (comme un produit promotionnel) expire à un certain moment. Il existe un grand nombre de demandes simultanées pour cette clé à ce stade. le cache a expiré. Généralement, les données sont chargées à partir de la base de données principale et restaurées dans le cache. À ce stade, des requêtes simultanées volumineuses peuvent instantanément submerger la base de données principale.

Solution

Verrouillez la requête du cache. Si la CLÉ n'existe pas, verrouillez-la, puis enregistrez la base de données dans le cache, puis déverrouillez-la. Les autres processus attendent s'ils trouvent un verrou, puis renvoient les données ou ; entrez dans la base de données après le déverrouillage. Pour

plus de connaissances liées à la programmation, veuillez visiter : Vidéo de 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer