recherche
Maisonbase de donnéesRedisAnalysons ensemble les problèmes de cohérence du cache Redis, de pénétration du cache, de panne de cache et d'avalanche de cache

Cet article vous apporte des connaissances pertinentes sur Redis, qui présente principalement les problèmes liés à la cohérence du cache, à la pénétration du cache, à la panne du cache, à l'avalanche de cache et à la synchronisation d'écriture des données mises en cache et à la cohérence de la base de données. Jetons-y un coup d'œil ensemble, je l'espère. sera utile à tout le monde.

Analysons ensemble les problèmes de cohérence du cache Redis, de pénétration du cache, de panne de cache et d'avalanche de cache

Recommandations associées : "Analyse des problèmes de stockage des touches de raccourci dans Redis et discussion sur les solutions aux exceptions de cache"

(1) Problème de cohérence d'invalidation du cache

L'utilisation générale du cache est : Lire le cachez d'abord, s'il n'existe pas, lisez-le à partir de la base de données et écrivez le résultat dans le cache ; la prochaine fois que les données seront lues, les données pourront être obtenues directement à partir du cache. [Recommandation associée : Tutoriel vidéo Redis]

La modification des données consiste à invalider directement les données mises en cache, puis à modifier le contenu de la base de données pour éviter une modification réussie de la base de données, mais les données mises en cache ne sont pas nettoyées en raison de problèmes de réseau ou autres, ce qui entraîne données sales. Mais cela ne peut toujours pas éviter la génération de données sales. Dans un scénario simultané : supposons que l'entreprise ait un grand nombre de demandes de lecture et de modification pour les données Key:Hello Value:World. Le thread A lit Key:Hello from OCS, obtient le résultat Not Found, commence à demander des données à la base de données et obtient ensuite les données Key:Hello Value:World ; il se prépare ensuite à écrire ces données sur OCS, mais avant d'écrire sur OCS (réseau). , Attendre le CPU peut entraîner un ralentissement de la vitesse de traitement du thread A.) Un autre thread B demande de modifier les données Key:Hello Value:OCS et exécute d'abord l'action de cache d'invalidation (car le thread B ne sait pas si ces données existent , il effectue donc directement l'opération d'invalidation). OCS a traité avec succès la requête invalide. Revenez au thread A pour continuer à écrire OCS et écrivez Key:Hello Value:World dans le cache. La tâche du thread A se termine également avec succès par la modification du contenu des données de la base de données en Key:Hello Value:OCS. Afin de résoudre ce problème, OCS a étendu le protocole Memcached (le cloud public le supportera bientôt) et ajouté l'interface deleteAndIncVersion. Cette interface ne supprime pas réellement les données, mais étiquette les données pour indiquer qu'elles ont expiré et augmente le numéro de version des données. Si les données n'existent pas, NULL est écrit et un numéro de version aléatoire des données est également généré. L'écriture OCS prend en charge la comparaison atomique des numéros de version : en supposant que le numéro de version entrant est cohérent avec le numéro de version des données enregistré par OCS ou que les données d'origine n'existent pas, l'écriture est autorisée, sinon la modification est refusée.

Retour à la scène tout à l'heure : le fil de discussion A lit Key:Hello from OCS, obtient le résultat Not Found, commence à demander des données à la base de données et obtient les données Key:Hello Value:World, puis se prépare à écrire ces données dans OCS, Les informations sur le numéro de version sont par défaut 1 ; avant que A n'écrive dans OCS, un autre thread B lance une action pour modifier les données Key:Hello Value:OCS. Il exécute d'abord l'action de suppression du cache, OCS gère avec succès la requête deleteAndIncVersion et génère une version aléatoire. nombre de 12345 (convention supérieure à 1000). Revenez au thread A et continuez à écrire sur OCS, en demandant d'écrire Key:Hello Value:World. À ce stade, le système de cache constate que les informations sur le numéro de version entrant ne correspondent pas (1 ! = 12345), l'écriture échoue et le. La tâche du thread A se termine. Le thread B a également modifié avec succès le contenu des données de la base de données en Key:Hello Value:OCS.

À l'heure actuelle, les données dans OCS sont Key:Hello Value:NULL Version:12345 ; les données dans DB sont Key:Hello Value:OCS. Dans les tâches de lecture suivantes, les données dans DB seront réessayées d'écrire dans OCS. .

(2) Le problème de la synchronisation d'écriture des données mises en cache et de la cohérence de la base de données

À mesure que l'échelle du site Web augmente et que la fiabilité s'améliore, il sera confronté au déploiement de plusieurs IDC. Chaque IDC dispose d'une base de données et d'un système de cache indépendants. cette fois, la cohérence du cache est devenue un problème majeur.

Tout d'abord, afin de garantir une efficacité élevée, le système de cache empêchera les E/S sur le disque, même lors de l'écriture de BINLOG. Bien sûr, pour des raisons de performances, le système de cache ne peut supprimer que de manière synchrone et non écrire de manière synchrone, donc le cache la synchronisation aura généralement priorité sur l'arrivée de la synchronisation de la base de données (après tout, le système de cache L'efficacité est beaucoup plus élevée), alors il y aura un scénario où il n'y aura pas de données dans le cache et d'anciennes données dans la base de données. À ce stade, il y a une demande commerciale de données et le cache de lecture est introuvable. Les anciennes données lues à partir de la base de données et chargées dans le cache sont toujours des données anciennes. Lorsque la synchronisation des données de la base de données arrive, seule la base de données est mise à jour. et les données sales mises en cache ne peuvent pas être effacées.

Analysons ensemble les problèmes de cohérence du cache Redis, de pénétration du cache, de panne de cache et davalanche de cache

Comme le montre la situation ci-dessus, la cause première de l'incohérence est que les systèmes hétérogènes ne peuvent pas se synchroniser de manière collaborative. Ils ne peuvent pas garantir que les données de la base de données soient synchronisées en premier et que les données mises en cache soient synchronisées ultérieurement. Nous devons donc considérer comment le système de cache attend la synchronisation de la base de données, ou les deux peuvent-ils partager un mécanisme de synchronisation ? La synchronisation du cache s'appuie également sur DB BINLOG qui est une solution réalisable.

La base de données dans IDC1 est synchronisée avec la base de données dans IDC2 via BINLOG. Dans ce cas, la modification des données IDC2-DB générera également son propre BINLOG. La synchronisation des données mises en cache peut être effectuée via IDC2-DB BINLOG. Une fois que le module de synchronisation du cache a analysé le BINLOG, il invalide la clé de cache correspondante et modifie la synchronisation de parallèle à série, garantissant ainsi l'ordre.

(3) Pénétration du cache (la base de données a subi un trafic de requêtes inutile)

Méthode 1 : C'est un filtre Bloom. Il s'agit d'un algorithme probabiliste et d'une structure de données extrêmement économes en espace, utilisés pour déterminer si un élément fait partie d'un ensemble (similaire à Hashset). Son noyau est un long vecteur binaire et une série de fonctions de hachage. Implémentez le filtre Bloom à l'aide de la goyave de Google. 1) Il existe un taux d'erreurs de calcul à mesure que le nombre d'éléments stockés augmente, le taux d'erreurs de calcul augmente également. 2) Dans des circonstances normales, les éléments ne peuvent pas être supprimés du filtre Bloom. 3) Le processus de détermination de la longueur du tableau et du nombre d'éléments. Les fonctions de hachage sont complexes et la distribution. Quels sont les scénarios d'utilisation du filtre Long ? 1) Filtrage des adresses spam (le nombre d'adresses est énorme) 2) Déduplication des adresses URL du robot 3) Résoudre le problème de panne de cache

Méthode 2 : stocker les résultats vides et définir l'heure des résultats vides

(4) Avalanche de cache ( Définir le cache sur le même délai d'expiration provoquera une inondation de base de données)

Méthode 1 : La plupart des concepteurs de systèmes envisagent d'utiliser des verrous ou des files d'attente pour garantir les écritures monothread (processus) dans le cache, évitant ainsi la chute d'un grand nombre de requêtes simultanées. lors d'une panne Sur le système de stockage sous-jacent

Méthode 2 : Délai d'expiration aléatoire

(5) Panne du cache (touche de raccourci, petite avalanche provoquée par un grand nombre de requêtes de lecture simultanées)

Lorsque le cache expire à un certain moment À ce stade, il y a un grand nombre de demandes simultanées pour cette clé. Lorsque ces demandes constatent que le cache a expiré, elles chargent généralement les données de la base de données backend et les réinitialisent dans le cache. À l'heure actuelle, des requêtes simultanées volumineuses peuvent instantanément submerger la base de données backend

Méthode 1 : 1. Utilisez la clé mutex (clé mutex) prise en charge par le cache de distribution pour définir une clé mutex. Lorsque l'opération est renvoyée avec succès, effectuez le chargement de la base de données. opération et réinitialiser le cache, c'est-à-dire qu'il n'y aura qu'un seul traitement de chargement DB Thread.

Méthode 2 : utilisez la clé mutex à l'avance : définissez une valeur de délai d'attente (timeout1) à l'intérieur de la valeur, timeout1 est plus petit que le délai d'expiration réel du cache mémoire (timeout2). Lorsque timeout1 est lu à partir du cache, il s'avère qu'il a expiré. Le moment venu, prolongez immédiatement le délai d'attente1 et réinitialisez-le dans le cache. Ensuite, chargez les données de la base de données et définissez-les dans le cache. Cela augmente l'intrusion du code métier et augmente la complexité du codage. : Du point de vue de Redis, il n'y a en effet pas de délai d'expiration, ce qui garantit qu'il n'y aura pas de problème d'expiration de clé de hotspot, c'est-à-dire qu'elle n'expirera pas "physiquement" d'un point de vue fonctionnel, si elle n'expire pas. , ne devient-il pas statique ? Nous stockons le délai d'expiration dans la valeur correspondant à la clé. S'il s'avère qu'elle est sur le point d'expirer, le cache est construit via un thread asynchrone en arrière-plan, ce qui est une expiration "logique"

.

(6) Plénitude courante du cache et perte de données dans le système de cache Le problème

doit être analysé en fonction d'une activité spécifique. Habituellement, nous utilisons la stratégie LRU pour gérer le débordement, et les stratégies de persistance RDB et AOF de Redis pour assurer la sécurité des données. dans certaines circonstances

Pour plus de connaissances sur 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
Redis est-il une base de données SQL ou NOSQL? La réponse expliquéeRedis est-il une base de données SQL ou NOSQL? La réponse expliquéeApr 18, 2025 am 12:11 AM

RedisservisifiedasanosqldatabaseBecauseiSeSakey-ValuedatamodelinSteadoftraDtionalrelationDatabasEmodel.itofferseSpeedAndFlexibibit

Redis: améliorer les performances et l'évolutivité des applicationsRedis: améliorer les performances et l'évolutivité des applicationsApr 17, 2025 am 12:16 AM

Redis améliore les performances et l'évolutivité des applications en mettant en cache des données, implémentant le verrouillage distribué et la persistance des données. 1) Données de cache: utilisez Redis pour mettre en cache les données fréquemment accessibles pour améliorer la vitesse d'accès aux données. 2) Verrouillage distribué: utilisez Redis pour implémenter les verrous distribués pour assurer la sécurité du fonctionnement dans un environnement distribué. 3) Persistance des données: assurer la sécurité des données via les mécanismes RDB et AOF pour éviter la perte de données.

Redis: explorer son modèle de données et sa structureRedis: explorer son modèle de données et sa structureApr 16, 2025 am 12:09 AM

Le modèle et la structure de données de Redis incluent cinq types principaux: 1. String: Utilisé pour stocker des données de texte ou binaires et prend en charge les opérations atomiques. 2. Liste: collection d'éléments commandés, adapté aux files d'attente et aux piles. 3. Ensemble: Éléments uniques non ordonnés Ensemble, soutenant le fonctionnement de l'ensemble. 4. Ensemble ordonné (triset): un ensemble unique d'éléments avec des scores, adaptés aux classements. 5. Table du hachage (hachage): une collection de paires de valeurs clés, adaptées au stockage d'objets.

Redis: classifier son approche de base de donnéesRedis: classifier son approche de base de donnéesApr 15, 2025 am 12:06 AM

Les méthodes de base de données de Redis incluent les bases de données en mémoire et le stockage de valeurs de clé. 1) Redis stocke les données en mémoire, lit et écrit rapidement. 2) Il utilise des paires de valeurs clés pour stocker des données, prend en charge des structures de données complexes telles que les listes, les collections, les tables de hachage et les collections ordonnées, adaptées aux caches et aux bases de données NoSQL.

Pourquoi utiliser Redis? Avantages et avantagesPourquoi utiliser Redis? Avantages et avantagesApr 14, 2025 am 12:07 AM

Redis est une puissante solution de base de données car elle offre des performances rapides, de riches structures de données, une haute disponibilité et une évolutivité, des capacités de persistance et un large éventail de support écosystémique. 1) Performances extrêmement rapides: les données de Redis sont stockées en mémoire et ont des vitesses de lecture et d'écriture extrêmement rapides, adaptées aux applications élevées de concurrence et de latence faible. 2) Rich Structure de données: prend en charge plusieurs types de données, tels que des listes, des collections, etc., qui conviennent à une variété de scénarios. 3) Haute disponibilité et évolutivité: prend en charge la réplication maître-esclave et le mode de cluster pour atteindre la haute disponibilité et l'évolutivité horizontale. 4) Persistance et sécurité des données: la persistance des données est obtenue via RDB et AOF pour garantir l'intégrité et la fiabilité des données. 5) Support d'écosystème et communautaire large: avec un énorme écosystème et une communauté active,

Comprendre le nosql: caractéristiques clés de RedisComprendre le nosql: caractéristiques clés de RedisApr 13, 2025 am 12:17 AM

Les caractéristiques clés de Redis incluent la vitesse, la flexibilité et le support de structure de données riche. 1) Speed: Redis est une base de données en mémoire, et les opérations de lecture et d'écriture sont presque instantanées, adaptées à la gestion du cache et de la session. 2) Flexibilité: prend en charge plusieurs structures de données, telles que des chaînes, des listes, des collections, etc., qui conviennent au traitement des données complexes. 3) Prise en charge de la structure des données: fournit des chaînes, des listes, des collections, des tables de hachage, etc., qui conviennent aux différents besoins commerciaux.

Redis: identifier sa fonction principaleRedis: identifier sa fonction principaleApr 12, 2025 am 12:01 AM

La fonction centrale de Redis est un système de stockage et de traitement de données en mémoire haute performance. 1) Accès aux données à grande vitesse: Redis stocke les données en mémoire et fournit une vitesse de lecture et d'écriture au niveau microseconde. 2) Rich Structure de données: prend en charge les chaînes, les listes, les collections, etc., et s'adapte à une variété de scénarios d'application. 3) Persistance: Persister les données sur le disque via RDB et AOF. 4) Publier l'abonnement: peut être utilisé dans les files d'attente de messages ou les systèmes de communication en temps réel.

Redis: un guide des structures de données populairesRedis: un guide des structures de données populairesApr 11, 2025 am 12:04 AM

Redis prend en charge une variété de structures de données, notamment: 1. String, adapté au stockage des données à valeur unique; 2. Liste, adaptée aux files d'attente et aux piles; 3. SET, utilisé pour stocker des données non dégonflées; 4. Ensemble ordonné, adapté aux listes de classement et aux files d'attente de priorité; 5. Table du hachage, adapté au stockage des données d'objet ou structurées.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.