Maison  >  Article  >  base de données  >  Comment verrouiller Redis

Comment verrouiller Redis

silencement
silencementoriginal
2019-06-05 14:49:333523parcourir

Cet article présente principalement plusieurs méthodes de verrouillage dans Redis, et les partage pour votre référence et votre étude. Je ne dirai pas grand-chose ci-dessous, jetons un coup d'œil à l'introduction détaillée.

Comment verrouiller Redis

Classification de verrouillage Redis

Les commandes de verrouillage qui peuvent être utilisées par Redis sont INCR, SETNX, SET

La première commande de verrouillage INCR

L'idée de ce type de verrouillage est que si la clé n'existe pas, alors la valeur de la clé sera initialisée à 0 d'abord, puis exécuté. L'opération INCR en ajoute un.
Ensuite, lorsque d'autres utilisateurs effectuent l'opération INCR pour incrémenter de un, si le nombre renvoyé est supérieur à 1, cela signifie que le verrou est utilisé.

1. Le client A demande au serveur d'obtenir la valeur de clé de 1, indiquant que le verrou a été obtenu

2. Le client B demande également au serveur d'obtenir la valeur de clé de 2, indiquant que l'acquisition du verrou a échoué

3. Le client A termine l'exécution du code et supprime le verrou

4 Le client B attend un certain temps et obtient la valeur de clé de 1 lors de la création d'un verrou. demande, indiquant que l'acquisition du verrou est réussie

5. Le client B exécute le code et supprime le verrou

$redis->incr($key);
$redis->expire($key, $ttl); //设置生成时间为1秒

Le deuxième verrou SETNX

Le L'idée derrière ce type de verrouillage est que si la clé n'existe pas, définissez la clé sur la valeur

Si la clé existe déjà, SETNX n'effectue aucune action

1. serveur pour définir la valeur de la clé. Si le réglage est réussi, cela signifie que le verrouillage est réussi

2. Le client B demande également au serveur de définir la valeur de la clé. Si le retour échoue, cela signifie que le verrouillage est effectué. échoué

3. Le client A termine l'exécution du code et supprime le verrou

4 Après avoir attendu un certain temps, le client B demande de définir la valeur de la clé et le réglage est réussi<.>

5. Le client B termine l'exécution du code et supprime le verrou

$redis->setNX($key, $value);
$redis->expire($key, $ttl);

Third Seed lock SET

Les deux méthodes ci-dessus auront un problème. constatent qu'ils doivent définir l'expiration de la clé. Alors pourquoi devons-nous définir l’expiration des clés ? Si l'exécution de la requête se termine de manière inattendue pour une raison quelconque, entraînant la création du verrou mais pas sa suppression, le verrou existera toujours, de sorte que le cache ne sera jamais mis à jour à l'avenir. Il faut donc ajouter un délai d'expiration au verrou pour éviter les accidents.

Mais le définir avec Expire n'est pas une opération atomique. Par conséquent, les transactions peuvent également être utilisées pour garantir l'atomicité, mais il y a encore quelques problèmes, c'est pourquoi le responsable en a cité un autre. L'utilisation de la commande SET elle-même inclut la fonction de définition du délai d'expiration à partir de la version 2.6.12.

1. Le client A demande au serveur de définir la valeur de la clé. Si le réglage est réussi, le verrouillage est réussi

2. le retour échoue, cela signifie alors que le verrou a échoué

3. Le client A termine l'exécution du code et supprime le verrou

4. Le client B demande de définir la valeur de la clé après avoir attendu. une période de temps et le réglage est réussi

5. Le client B termine l'exécution du code et supprime le verrou

$redis->set($key, $value, array(&#39;nx&#39;, &#39;ex&#39; => $ttl)); //ex表示秒
.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Comment fonctionne Redis ?Article suivant:Comment fonctionne Redis ?