Comment Redis implémente la fonction de verrouillage distribué
Comment Redis implémente la fonction de verrouillage distribué
Le verrouillage distribué est un mécanisme de synchronisation couramment utilisé dans les systèmes distribués. Il peut nous aider à obtenir une exclusion mutuelle des ressources partagées entre plusieurs processus ou plusieurs accès à des serveurs. En tant que middleware de cache et de file d'attente de messages hautes performances, Redis fournit également la fonction d'implémentation de verrous distribués. Cet article présentera comment Redis implémente les verrous distribués et fournira des exemples de code spécifiques.
- Verrouillage distribué implémenté sur la base de la commande SETNX
Redis fournit la commande SETNX, qui peut définir la valeur de la clé lorsque la clé n'existe pas. Si la clé existe déjà, l'exécution de la commande échoue. Nous pouvons utiliser la commande SETNX pour implémenter la fonction de verrouillage distribué.
Ce qui suit est un exemple de code pour un verrou distribué basé sur la commande SETNX :
import redis class RedisLock: def __init__(self, key, value, expire_time): self.redis = redis.Redis(host='localhost', port=6379, db=0) self.key = key self.value = value self.expire_time = expire_time def acquire(self): while True: result = self.redis.setnx(self.key, self.value) if result: self.redis.expire(self.key, self.expire_time) return True def release(self): self.redis.delete(self.key)
Dans le code ci-dessus, nous définissons une classe RedisLock, qui a deux méthodes : acquérir et libérer. La méthode d'acquisition tente d'acquérir le verrou distribué et renvoie True si l'acquisition réussit ; la méthode release libère le verrou distribué.
Vous pouvez l'appeler ainsi lorsque vous utilisez :
lock = RedisLock('my_lock', '1', 10) if lock.acquire(): try: # 执行需要加锁的业务逻辑 ... finally: lock.release()
- Verrou distribué basé sur la commande SET et le script Lua
L'implémentation ci-dessus basée sur la commande SETNX peut avoir des problèmes dans certains cas, par exemple lorsque le temps d'exécution de la logique métier est très longtemps, cela peut provoquer une défaillance du verrouillage. Afin de résoudre ce problème, nous pouvons utiliser le script Lua combiné à la commande SET pour implémenter le verrouillage distribué.
Ce qui suit est un exemple de code pour un verrou distribué basé sur la commande SET et le script Lua :
import redis class RedisLock: def __init__(self, key, value, expire_time): self.redis = redis.Redis(host='localhost', port=6379, db=0) self.key = key self.value = value self.expire_time = expire_time def acquire(self): script = ''' if redis.call("exists", KEYS[1]) == 0 then redis.call("set", KEYS[1], ARGV[1]) redis.call("expire", KEYS[1], tonumber(ARGV[2])) return 1 else return 0 end ''' result = self.redis.eval(script, 1, self.key, self.value, self.expire_time) return result == 1 def release(self): self.redis.delete(self.key)
Dans le code ci-dessus, nous utilisons la méthode eval pour appeler le script Lua. Le script détermine s'il faut définir la valeur du. clé en jugeant si la clé existe et le délai d'expiration. De cette façon, même si l'exécution de la logique métier prend beaucoup de temps, le problème d'échec du verrouillage ne se produira pas.
La méthode d'utilisation est la même que l'implémentation ci-dessus basée sur la commande SETNX.
Résumé :
Cet article présente comment Redis implémente la fonction de verrouillage distribué et fournit des exemples de code basés sur les commandes SETNX et les commandes SET et les scripts Lua. Dans les applications pratiques, nous pouvons choisir une méthode de mise en œuvre appropriée pour implémenter des verrous distribués en fonction des besoins afin de garantir un accès mutuellement exclusif aux ressources partagées.
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Comment effacer les données Redis: utilisez la commande flushall pour effacer toutes les valeurs de clé. Utilisez la commande flushdb pour effacer la valeur clé de la base de données actuellement sélectionnée. Utilisez SELECT pour commuter les bases de données, puis utilisez FlushDB pour effacer plusieurs bases de données. Utilisez la commande del pour supprimer une clé spécifique. Utilisez l'outil Redis-CLI pour effacer les données.

Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

L'utilisation de la directive Redis nécessite les étapes suivantes: Ouvrez le client Redis. Entrez la commande (Verbe Key Value). Fournit les paramètres requis (varie de l'instruction à l'instruction). Appuyez sur Entrée pour exécuter la commande. Redis renvoie une réponse indiquant le résultat de l'opération (généralement OK ou -err).

L'utilisation des opérations Redis pour verrouiller nécessite l'obtention du verrouillage via la commande setnx, puis en utilisant la commande Expire pour définir le temps d'expiration. Les étapes spécifiques sont les suivantes: (1) Utilisez la commande setnx pour essayer de définir une paire de valeurs de clé; (2) Utilisez la commande Expire pour définir le temps d'expiration du verrou; (3) Utilisez la commande del pour supprimer le verrouillage lorsque le verrouillage n'est plus nécessaire.

La meilleure façon de comprendre le code source redis est d'aller étape par étape: familiarisez-vous avec les bases de Redis. Sélectionnez un module ou une fonction spécifique comme point de départ. Commencez par le point d'entrée du module ou de la fonction et affichez le code ligne par ligne. Affichez le code via la chaîne d'appel de fonction. Familiez les structures de données sous-jacentes utilisées par Redis. Identifiez l'algorithme utilisé par Redis.

Sur CentOS Systems, vous pouvez limiter le temps d'exécution des scripts LUA en modifiant les fichiers de configuration Redis ou en utilisant des commandes Redis pour empêcher les scripts malveillants de consommer trop de ressources. Méthode 1: Modifiez le fichier de configuration Redis et localisez le fichier de configuration Redis: le fichier de configuration redis est généralement situé dans /etc/redis/redis.conf. Edit Fichier de configuration: Ouvrez le fichier de configuration à l'aide d'un éditeur de texte (tel que VI ou NANO): Sudovi / etc / redis / redis.conf Définissez le délai d'exécution du script LUA: Ajouter ou modifier les lignes suivantes dans le fichier de configuration pour définir le temps d'exécution maximal du script LUA (unité: millisecondes)

Utilisez l'outil de ligne de commande redis (Redis-CLI) pour gérer et utiliser Redis via les étapes suivantes: Connectez-vous au serveur, spécifiez l'adresse et le port. Envoyez des commandes au serveur à l'aide du nom et des paramètres de commande. Utilisez la commande d'aide pour afficher les informations d'aide pour une commande spécifique. Utilisez la commande QUIT pour quitter l'outil de ligne de commande.
