Maison  >  Article  >  base de données  >  Comment résoudre l'avalanche et la pénétration du cache Redis

Comment résoudre l'avalanche et la pénétration du cache Redis

青灯夜游
青灯夜游original
2021-07-13 15:06:372381parcourir

Solutions à la pénétration du cache : 1. Mettez en cache les données vides 2. Utilisez les filtres Bloom ; 2. Solution à l'avalanche de cache : 1. Définissez la clé du point d'accès correspondant pour qu'elle n'expire jamais ; 2. Échelonnez le délai d'expiration, utilisez la génération aléatoire pour le délai d'expiration et définissez le délai d'expiration des données du point d'accès plus long ; 3. Combinez plusieurs caches ; 4. Approvisionnement Redis tiers.

Comment résoudre l'avalanche et la pénétration du cache Redis

L'environnement d'exploitation de ce tutoriel : système windows7, version Redis6, ordinateur DELL G3.

Solutions à la pénétration du cache Redis et aux avalanches

1. >

Lorsque la clé demandée par l'utilisateur n'existe pas dans Redis et que l'identifiant correspondant n'existe pas dans la base de données, elle sera attaquée par des utilisateurs illégaux. Un grand nombre de requêtes seront directement adressées à la base de données, provoquant des temps d'arrêt et des temps d'arrêt. affectant ainsi l’ensemble du système, ce phénomène est appelé pénétration du cache.

Solution 1 : Mettre en cache les données vides, telles que des chaînes vides, des objets vides, des tableaux ou des listes vides, le code est le suivant

if (list != null && list.size() > 0) {
     redisOperator.set("subCat:" + rootCatId, JsonUtils.objectToJson(list));
} else {
     redisOperator.set("subCat:" + rootCatId, JsonUtils.objectToJson(list), 5*60);
}

Solution 2 :Filtre Bloom

Filtre Bloom :

Jugez si un élément est dans un tableau, comme indiqué ci-dessous, en utilisant le stockage binaire pour occuper la mémoire. Relativement petit, 0 représente la non-existence, 1 représente l'existence, et l'efficacité de l'ajout de requêtes est très rapide. Lorsqu'une valeur est enregistrée, un algorithme sera utilisé pour enregistrer la valeur correspondante à une certaine position sur l'ensemble de filtres Bloom. Une certaine position peut avoir plusieurs clés. Si une valeur de clé inexistante est transmise, elle sera mise en correspondance avec l'ensemble. Si elle ne correspond pas, une valeur nulle sera renvoyée.

Inconvénients :

1 % de taux d'erreur de jugement lorsqu'une clé est transmise. n'existe pas dans le tableau Bloom, mais en raison de ce taux d'erreur de jugement, il sera jugé que la clé existe dans une certaine situation. Lorsque le tableau est plus long, le taux d'erreur de jugement est inférieur, et plus le tableau est court, plus l'erreur de jugement est élevée. rate

2. Lorsque nous voulons supprimer une valeur clé, le contenu de notre base de données et redis sera supprimé, mais il ne pourra pas être supprimé dans le tableau Bloom car il y aura une paire de clés dans une certaine position de le tableau. Si nous voulons supprimer, nous changerons 1 en 0, mais toutes les valeurs clés seront supprimées

3 La complexité du code augmentera également, car nous devrons maintenir une collection supplémentaire. utilisez le cluster Redis, les filtres Bloom doivent être utilisés conjointement avec Redis

Insérer la description de l'image ici

2. Avalanche de cache Redis

Avalanche de cache : les données du cache échouent par lots importants, et cette utilisation nécessite ensuite un grand nombre de requêtes. Cependant, comme toutes les clés de redis sont invalides, toutes les requêtes seront adressées à la base de données, provoquant des temps d'arrêtp>

Solution

1. Définissez la clé de point d'accès correspondante pour qu'elle n'expire jamais
2. Échelonnez le délai d'expiration, utilisez la génération aléatoire pour le délai d'expiration et définissez le délai d'expiration des données du hotspot est plus long. Les données non chaudes peuvent être raccourcies.
3. En combinant plusieurs caches, par exemple : lors de la demande d'entrée, vous pouvez demander Redis maintenant, puis demander Memcache lorsqu'il n'existe pas dans redis. S'il n'existe pas, demandez à nouveau la base de données
4. Achetez des Redis tiers (redis sur Alibaba Cloud ou Tencent Cloud)

[Recommandations associées : 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!

Déclaration:
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