Maison > Article > base de données > Quelle est la solution à l'avalanche et à la pénétration de Redis
La solution est la suivante : 1. Pénétration du cache, vous pouvez également mettre en cache des données vides et utiliser des filtres Bloom ; 2. Avalanche de cache, vous pouvez définir la clé de point d'accès correspondante pour qu'elle n'expire jamais, combiner plusieurs caches et acheter un troisième cache. Party Redis et délai d'expiration échelonné, le délai d'expiration peut être généré de manière aléatoire.
L'environnement d'exploitation de ce tutoriel : système Windows 7, Redis version 5.0.10, ordinateur DELL G3.
Pénétration du cache Redis et solutions
1. Pénétration du cache
1 Lorsque la clé interrogée par l'utilisateur n'existe pas dans Redis, l'identifiant correspondant n'existe pas dans le. Si elle est attaquée par des utilisateurs illégaux à ce moment-là, un grand nombre de requêtes seront directement affectées à la base de données, provoquant des temps d'arrêt et affectant ainsi l'ensemble du système. Ce phénomène est appelé pénétration du cache.
2. 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 : Déterminez si un élément est dans un tableau, comme indiqué ci-dessous. Il s'agit d'un stockage effectué en binaire et prend moins de mémoire, 1 signifie présent, ce qui augmente l'efficacité des requêtes. est enregistrée, un algorithme sera utilisé pour enregistrer la valeur correspondante à une certaine position sur l'ensemble de filtres Bloom. Il peut y avoir plusieurs clés à une certaine position lorsqu'une valeur de clé inexistante est transmise et correspond à l'ensemble. . S'il n'y a pas de correspondance, une valeur nulle sera renvoyée
Inconvénients : 1. 1 % de taux d'erreur de jugement, lorsqu'une clé n'existe pas dans le tableau Bloom, mais en raison de ce taux d'erreur de jugement, dans certaines circonstances, elle est renvoyée. est jugé que la clé existe. Plus le tableau est long, plus le taux de faux positifs est faible, et plus le tableau est court, plus le taux de faux positifs est élevé
2. Lorsque nous voulons supprimer une certaine valeur de clé, cela is Le contenu de notre base de données et redis sera supprimé, mais il ne peut pas être supprimé dans le tableau Bloom, car il y aura une clé à une certaine position dans le tableau. Si nous voulons la supprimer, nous changerons 1 en 0, mais toutes les clés qu'il contient seront supprimées. Toutes les valeurs sont supprimées
3. La complexité du code augmentera également car nous devons maintenir une collection supplémentaire lorsque nous utilisons le cluster Redis, le filtre Bloom doit être utilisé. en conjonction avec redis
2. Avalanche de cache Redis
1. Avalanche de cache : les données du cache échouent par lots importants, puis cette application nécessite Cependant, parce que toutes les clés dans redis En cas d'échec, toutes les requêtes seront envoyées à la base de données, provoquant un temps d'arrêt
Solution
. Définissez la clé de point d'accès correspondante pour qu'elle n'expire jamais
Le délai d'expiration est échelonné, le délai d'expiration est généré de manière aléatoire, le délai d'expiration des données du point d'accès est défini plus longtemps et le délai d'expiration des données non -Les données du hotspot peuvent être définies plus courtes
Plusieurs combinaisons de cache, par exemple : pour demander l'entrée, vous pouvez demander redis maintenant. Lorsque redis n'existe pas, demandez memcache s'il n'existe pas. , demandez à db
d'acheter des Redis tiers (sur Alibaba Cloud ou Tencent Cloud)
Recommandations de tutoriel associées : Tutoriel 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!