Redis setnx

Redis setnx

Type de données de la chaîne Redis

Redis est un magasin de données en mémoire qui prend en charge des structures de données plus complexes par rapport aux autres magasins de données de valeur clé. Parmi toutes ces structures de données complexes comme les ensembles, les hachages, les bitmaps et les listes, il prend également en charge les types de chaînes les plus simples. Dans ce cas, une clé de chaîne mappe à une valeur de chaîne. Habituellement, les commandes SET et GET sont utilisées pour créer et récupérer les données de valeur clé du magasin Redis. De plus, la commande set crée une nouvelle clé dans la mémoire et y mappe une valeur de chaîne, rien de plus que cela. Il écrasera la valeur si la clé existe déjà.

Aucun mécanisme de sécurité n'est implémenté avec la commande SET par défaut pour gérer les mutations de valeur par plusieurs clients simultanément sans accord mutuel. Cette commande doit être appelée avec des mesures de sécurité en place, comme un mécanisme de verrouillage.

Réglage d'une valeur clé conditionnellement

Il est toujours préférable de suivre une mesure de sécurité lors de la mutation d'une valeur stockée à une clé donnée. Par conséquent, Redis a introduit une option à la commande set Nx qui est en place et ne muter pas la valeur d'une clé déjà existante. Le même comportement a été mis en œuvre avec une nouvelle commande qui est expliquée dans la section suivante.

La commande setnx

La commande setnx, comme son nom l'indique, «Définir s'ils existe, " ce qui signifie que la commande ne définira une valeur que si et seulement si la clé spécifiée n'existe pas dans le magasin de données. Chaque fois que la clé spécifiée existe déjà, la commande n'effectuera aucune opération sur cette touche. Avec cette restriction, la commande setnx est plus sûre que la commande set. De plus, cette commande a une complexité de temps constante.

Syntaxe:

Valeur setnx redis_key

redis_key: L'identifiant unique d'une entrée de paire de valeurs clés redis.

valeur: La valeur associée à la clé redis.

Cette commande renvoie une réponse entière où la clé 1 signifie définie avec une nouvelle valeur. Si la valeur renvoyée est 0, la clé n'est pas définie et la clé existante conservera l'ancienne valeur.

Exemple 01 - Mécanisme de verrouillage avec setnx

Supposons un jeu en ligne où plusieurs joueurs accéderont à un seau d'or commun appartenant à leur équipe. Les joueurs peuvent accéder au seau d'or et le remplir avec l'or qu'ils ont trouvé en explorant le monde. Imagine le joueur un accès au seau d'or et laisse tomber de l'or dans une période fixe. En même temps, le joueur deux essaie de consommer de l'or du même seau. Dans ce cas, l'accès ne doit pas être remis au joueur deux jusqu'à ce que le joueur one libère le seau d'or. Cela peut être implémenté avec la commande setnx avec un simple mécanisme de verrouillage.

Le Joueur: 1 peut utiliser la commande setnx pour définir la quantité d'or totale dans le seau. Supposons que nous allons stocker la quantité d'or dans la clé goldbucket.

Setnx Goldbucket 100

Comme prévu, le goldbucket La clé a été créée avec une valeur de 100. Maintenant, Joueur: 1 a le verrouillage. Disons Joueur: 2 va appeler la commande setnx pour définir le nouveau montant d'or.

Setnx Goldbucket 200

Cette fois, la commande renvoie 0 parce que la clé goldbucket existant. En d'autres termes, la clé est verrouillée par le Joueur: 1 déjà. Par conséquent, le joueur: 2 doit attendre que le joueur: 1 libère le verrou en supprimant ou en expiration automatique.

Vérifions la valeur associée au goldbucket clé, comme indiqué dans ce qui suit.

Obtenez Goldbucket

Comme prévu, la valeur est toujours 100, ce qui signifie le Joueur: 1 a déjà verrouillé la valeur des données. Ainsi, Joueur: 2 doit continuer à attendre que le délai d'expiration expire et Joueur: 1 le libère.

Il peut y avoir une situation de blocage si le client s'écrase ou échoue en raison d'une défaillance du réseau et que le verrou n'a pas été libéré par le client écrasé. Plusieurs clients peuvent le remarquer et essayer de supprimer le verrou à l'aide de la commande del. En conséquence, chaque client supprimera ses propres clés à plusieurs reprises, ce qui mènera à une impasse.

Il peut être résolu par chaque client vérifiant l'horodatage à l'avance à l'aide de la commande getset, puis acquérir le verrou à l'aide de la commande setnx si et seulement si l'horodatage est expiré.

Conclusion

Pour résumer, Redis est un magasin de valeurs clés qui prend en charge les types de données de chaîne les plus simples parmi les autres structures de données complexes comme les hachages, les ensembles, les bitmaps et les listes. Comme vous le savez tous, définissez et obtenez les commandes les plus élémentaires qui peuvent être utilisées pour créer et récupérer les paires de valeurs de clé Redis. La méthode définie est utilisée pour créer des paires de valeurs de clé dans la base de données redis qui écrasent finalement la valeur associée pour une clé spécifiée si la clé existe déjà dans la base de données. Comme indiqué précédemment dans l'article, cette mutation de valeur dangereuse peut être limitée avec la commande redis setnx. La commande setnx définit la valeur d'une clé donnée si la clé n'existe pas déjà. Chaque fois qu'une clé existe, la commande n'effectue rien et renvoie 0. Par conséquent, la commande setnx est utilisée pour implémenter les mécanismes de verrouillage dans les applications en temps réel.