Maison >base de données >Redis >Pourquoi Redis peut-il effectuer des verrous distribués ?
Redis est un mode mono-thread à processus unique. Il utilise le mode file d'attente pour transformer l'accès simultané en accès série, et il n'y a pas de concurrence entre les connexions de plusieurs clients à Redis. .
Le code implémenté consiste principalement à verrouiller le numéro de série d'une certaine donnée afin d'empêcher plusieurs threads d'écrire ces données. (Mutuellement exclusif) (Apprentissage recommandé : Tutoriel vidéo Redis)
Le verrou distribué Redis le plus populaire actuellement est Redisson. Le principe est de comprendre comment Redis utilise les verrous distribués
Analyse des principes
Ce que les verrous distribués doivent résoudre se trouve dans un environnement distribué. du même code ; ceux qui ont entendu parler des verrous distribués Redis doivent savoir que Redis a initialement utilisé setnx comme verrou distribué, puis a défini un délai d'expiration planifié sur cette base. Mais quels sont les problèmes avec cette méthode ?
En fait, les personnes qui comprennent l'image ci-dessus comprendront quel est le problème. Le premier est le problème d'atomicité. Les deux opérations setnx + délai d'expiration doivent être atomiques, cela peut donc être résolu avec le script Lua. 🎜>
Alors comment déterminer le moment de déverrouillage ?
Peu importe le délai d'expiration que nous fixons, il n'y a aucune garantie que le code verrouillé sera exécuté pendant cette période, il n'est donc pas bon de définir ce délai Si ; l'heure n'est pas déterminée, lorsque l'exécution est terminée, le verrou est libéré. Le problème est que si la machine tombe en panne à mi-chemin de l'exécution, le verrou ne sera jamais libéréAlors, comment Redisson fonctionne-t-il? résoudre le problème ci-dessus ?
Il encapsule le code de manière simplifiée. Il est très simple à utiliser. Nous n'avons même pas besoin de définir activement le délai d'expiration. Le second vérifiera si le verrou est toujours maintenu. il maintient le verrou, il mettra à jour le délai d'expiration pendant 30 secondes. Grâce à cette conception, il peut conserver le verrou jusqu'à ce qu'il soit libéré, et il peut automatiquement maintenir le verrou même s'il est en panne, et le client qui ne peut pas obtenir le verrou essaiera continuellement de verrouiller en boucle
En enregistrant l'ID client du verrou, il peut être conçu comme un verrou réentrant
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!