Maison > Article > base de données > À quoi devez-vous faire attention lorsque vous utilisez Redis ?
Les principaux problèmes auxquels il faut prêter attention lors de l'utilisation de Redis sont les suivants :
Problèmes de cohérence de Redis et de double écriture de base de données (apprentissage recommandé : Tutoriel vidéo Redis )
Analyse : le problème de cohérence est un problème distribué courant et peut être divisé en cohérence finale et cohérence forte. Si la base de données et le cache sont écrits en double, il y aura inévitablement des incohérences. Pour répondre à cette question, comprenez d’abord une prémisse. Autrement dit, s’il existe des exigences strictes de cohérence pour les données, elles ne peuvent pas être mises en cache. Tout ce que nous faisons ne peut que garantir une cohérence à terme. De plus, fondamentalement, la solution que nous avons adoptée ne peut que réduire la probabilité d’incohérence, mais ne peut pas l’éviter complètement. Par conséquent, les données présentant de fortes exigences de cohérence ne peuvent pas être mises en cache. ----------
Analyse : le problème de cohérence est un problème distribué courant et peut être divisé en cohérence finale et cohérence forte. Si la base de données et le cache sont écrits en double, il y aura inévitablement des incohérences. Pour répondre à cette question, comprenez d’abord une prémisse. Autrement dit, s’il existe des exigences strictes de cohérence pour les données, elles ne peuvent pas être mises en cache. Tout ce que nous faisons ne peut que garantir une cohérence à terme. De plus, fondamentalement, la solution que nous avons adoptée ne peut que réduire la probabilité d’incohérence, mais ne peut pas l’éviter complètement. Par conséquent, les données présentant de fortes exigences de cohérence ne peuvent pas être mises en cache.
Tout d'abord, adoptez la bonne stratégie de mise à jour, mettez d'abord à jour la base de données, puis supprimez le cache. Deuxièmement, comme il peut y avoir un problème d'échec de suppression du cache, une mesure de compensation peut être prévue, comme l'utilisation d'une file d'attente de messages.
Comment gérer les problèmes de pénétration du cache et d'avalanche de cache
Analyse : Pour être honnête, ces deux problèmes sont très difficiles à résoudre pour les petites et moyennes entreprises de logiciels traditionnelles rencontre. Cette question. S’il existe de grands projets simultanés, le trafic atteindra environ des millions. Ces deux questions doivent être considérées en profondeur.
Réponse : comme indiqué ci-dessous
Pénétration du cache, c'est-à-dire que les pirates demandent délibérément des données qui n'existent pas dans le cache, ce qui entraîne l'envoi de toutes les demandes à la base de données, ce qui rend la connexion à la base de données anormale.
Solution :
(1) Utiliser le verrouillage mutex. Lorsque le cache échoue, obtenez d'abord le verrou. Après avoir obtenu le verrou, demandez la base de données. Si le verrou n'est pas obtenu, il dormira pendant un certain temps et réessayera
(2) Utilisez une stratégie de mise à jour asynchrone et reviendra directement, que la clé ait ou non une valeur. Un délai d'expiration du cache est conservé dans la valeur value. Si le cache expire, un thread sera démarré de manière asynchrone pour lire la base de données et mettre à jour le cache. Une opération de préchauffage du cache (chargement du cache avant de démarrer le projet) est requise.
(3) Fournir un mécanisme d'interception capable de déterminer rapidement si la demande est valide, par exemple en utilisant des filtres Bloom pour maintenir en interne une série de clés légales et valides. Déterminez rapidement si la clé transportée dans la demande est légale et valide. Si c'est illégal, revenez directement.
Avalanche de cache, c'est-à-dire que le cache échoue dans une vaste zone en même temps. À ce moment-là, une autre vague de requêtes arrive et, par conséquent, les requêtes sont toutes envoyées à la base de données. , entraînant une connexion anormale à la base de données.
Solution :
(1) Ajoutez une valeur aléatoire au délai d'expiration du cache pour éviter un échec collectif.
(2) Utilisez un verrou mutex, mais le débit de cette solution diminue considérablement.
(3) Double mise en mémoire tampon. Nous avons deux caches, le cache A et le cache B. Le délai d'expiration du cache A est de 20 minutes et il n'y a pas de délai d'expiration pour le cache B. Effectuez vous-même l’opération de préchauffage du cache. Décomposez ensuite les points suivants
Je lit la base de données depuis le cache A, et renvoie directement s'il y en a
II A n'a pas de données, lit les données directement depuis B, renvoie directement et démarrez de manière asynchrone un thread de mise à jour.
III Le fil de mise à jour met à jour le cache A et le cache B en même temps.
Comment résoudre le problème de la concurrence simultanée des clés dans Redis
Analyse : ce problème est en gros qu'il existe plusieurs sous-systèmes définissant une clé en même temps. À quoi devons-nous faire attention à ce moment-là ? Y avez-vous déjà pensé ? Il faut expliquer que le blogueur a effectué une recherche préalable sur Baidu et a constaté que les réponses recommandaient essentiellement d'utiliser le mécanisme de transaction Redis. Le blogueur ne recommande pas d'utiliser le mécanisme de transaction Redis. Étant donné que notre environnement de production est essentiellement un environnement de cluster Redis, des opérations de partitionnement de données sont effectuées. Lorsque plusieurs opérations de clé sont impliquées dans une transaction, ces multiples clés ne sont pas nécessairement stockées sur le même serveur Redis. Par conséquent, le mécanisme de transaction de Redis est très inutile.
Réponse : Comme indiqué ci-dessous
(1) Si vous actionnez cette clé, la commande n'est pas requise
Dans ce cas, préparez une serrure distribuée et tout le monde saisira la lock , effectuez simplement l'opération définie après avoir saisi le verrou, ce qui est relativement simple.
(2) Si vous utilisez cette touche, la séquence requise est
Supposons qu'il existe une clé1, le système A doit définir la clé1 sur la valeurA, le système B doit définir la clé1 sur la valeurB, et le système C doit définir key1 sur valueB. key1 est défini sur valueC
s'attend à ce que la valeur de key1 change dans l'ordre valueA–>valueB–>valueC. À l’heure actuelle, nous devons enregistrer un horodatage lors de l’écriture des données dans la base de données. Supposons que l'horodatage soit le suivant
系统A key 1 {valueA 3:00} 系统B key 1 {valueB 3:05} 系统C key 1 {valueC 3:10}
Ensuite, supposons que le système B saisit le verrou en premier et définit key1 sur {valueB 3:05}. Ensuite, le système A saisit le verrou et constate que l'horodatage de sa propre valeur A est antérieur à l'horodatage dans le cache, il n'effectue donc pas l'opération définie. Et ainsi de suite.
Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Tutoriel d'introduction sur l'utilisation de la base de données Redis pour apprendre !
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!