Maison base de données Redis Guide de prévention des fosses Redis – Transactions

Guide de prévention des fosses Redis – Transactions

Jan 27, 2021 am 09:14 AM
redis 事务

Guide de prévention des fosses Redis – Transactions

Introduction aux commandes associées :

(Partage de vidéos d'apprentissage : Tutoriel vidéo Redis)

Guide de prévention des fosses Redis – Transactions

Remarque :

------MULTI, EXEC, DISCARD sont des commandes courantes pour démarrer et contrôler explicitement des transactions, qui peuvent être comparées à BEGAIN, COMMIT, ROLLBACK dans les bases de données relationnelles (en fait, l'écart Très grand);

------L'utilisation de la commande WATCH est de résoudre le problème des lectures non répétables et des lectures fantômes causées par la concurrence des transactions (simplement comprises comme le verrouillage de la clé

Transaction Redis

MULTI, EXEC, DISCARD et WATCH sont la base de la transaction Redis. Utilisés pour démarrer et contrôler explicitement une transaction, ils permettent d'exécuter un ensemble de commandes en une seule étape. Et offre deux garanties importantes :

Toutes les commandes de la transaction seront sérialisées et exécutées dans l'ordre. Lors de l'exécution d'une transaction Redis, aucune demande émise par un autre client ne se produira. Cela garantit que la file d’attente de commandes est exécutée comme une seule opération atomique.

Les commandes dans la file d'attente sont soit toutes traitées, soit ignorées. La commande EXEC déclenche l'exécution de toutes les commandes de la transaction. Ainsi, lorsque le client perd la connexion au serveur dans le contexte de la transaction, si cela se produit avant l'appel de la commande MULTI, aucune commande n'est exécutée si la commande EXEC est appelée ; avant cela, toutes les commandes sont exécutées.

Dans le même temps, redis utilise AOF (append-only file) pour écrire les transactions sur le disque à l'aide d'une opération d'écriture supplémentaire. En cas de temps d'arrêt ou de panne de processus, vous pouvez utiliser l'outil redis-check-aof pour réparer le fichier en ajout uniquement afin que le service puisse démarrer normalement et reprendre certaines opérations.

Utilisation

Utilisez la commande MULTI pour démarrer explicitement la transaction Redis. Cette commande répond toujours par OK. À ce stade, l'utilisateur peut émettre plusieurs commandes, et Redis n'exécutera pas ces commandes, mais les mettra en file d'attente. Une fois EXEC appelé, toutes les commandes seront exécutées. L’appel de DISCARD peut effacer la file d’attente des commandes dans la transaction et quitter la transaction.

L'exemple suivant incrémente atomiquement les clés foo et bar.

>MULTI
OK
>INCR foo
QUEUED
>INCR bar
QUEUED
>EXEC
1)(整数)1
2)(整数)1
Copier après la connexion

Comme le montre l'exécution de la commande ci-dessus, EXEC renvoie un tableau, où chaque élément est le résultat de retour d'une seule commande dans la transaction, et l'ordre est le même que l'ordre dans lequel la commande a été émis. Lorsqu'une connexion Redis est dans le contexte d'une requête MULTI, toutes les commandes recevront une réponse avec la chaîne QUEUED (envoyée comme réponse d'état du point de vue du protocole Redis) et mises en file d'attente dans la file d'attente des commandes. Ce n'est que lorsque EXEC est appelé que les commandes en file d'attente seront exécutées et le résultat réel sera renvoyé à ce moment-là.

Erreurs dans les transactions

Lors d'une transaction, deux types d'erreurs de commande peuvent être rencontrées :

Une erreur s'est produite avant l'appel de la commande EXEC (échec de la file d'attente COMMAND). Par exemple, la commande peut contenir des erreurs de syntaxe (mauvais nombre de paramètres, mauvais nom de commande...) ou il peut y avoir certaines conditions critiques, comme une mémoire insuffisante (si le serveur a des limites de mémoire en utilisant la directive maxmemory).

Le client détectera la première erreur avant d'appeler EXEC. En vérifiant la réponse d'état de la commande en file d'attente (***Remarque : cela fait référence à la réponse d'état en file d'attente, pas au résultat de l'exécution***), si la commande répond par QUEUED, elle a été correctement mise en file d'attente, sinon Redis renverra un erreur. Si une erreur se produit lors de la mise en file d'attente d'une commande, la plupart des clients abandonnent la transaction et effacent la file d'attente des commandes. Cependant :

Avant Redis 2.6.5, dans ce cas, après l'appel de la commande EXEC, le client exécutait un sous-ensemble de commandes (celles qui avaient été mises en file d'attente avec succès) et ignorait les erreurs précédentes. À partir de Redis 2.6.5, le serveur se souviendra des erreurs survenues lors de l'accumulation de commandes. Lorsque la commande EXEC est appelée, il refusera d'exécuter la transaction et renverra ces erreurs, tout en effaçant automatiquement la file d'attente des commandes. Un exemple est le suivant :

>MULTI
+OK
>INCR a b c
-ERR wrong number of arguments for 'incr' command
Copier après la connexion

Cela est dû à une erreur de syntaxe dans la commande INCR, qui sera détectée avant d'appeler EXEC et de terminer la transaction (version 2.6.5+).

Une erreur s'est produite après l'appel de la commande EXEC. Par exemple, utiliser une valeur incorrecte pour effectuer une opération sur une clé (comme appeler une opération List sur une valeur String)

Les erreurs qui surviennent après l'exécution de la commande EXEC ne seront pas traitées spécialement : même si certaines commandes de la transaction ne parviennent pas à s'exécuter, d'autres commandes seront toujours exécutées normalement.

L'exemple est le suivant :

>MULTI
+OK
>SET a 3
+QUEUED
>LPOP a
+QUEUED
>EXEC
*2
+OK
-ERR Operation against a key holding the wrong kind of value
Copier après la connexion

EXEC renvoie un tableau de chaînes contenant deux éléments, un élément est OK, l'autre est -ERR…. La question de savoir si les erreurs peuvent être correctement renvoyées aux utilisateurs dépend de l'implémentation de la bibliothèque client (telle que Spring-data-redis.redisTemplate). Il convient de noter que même si la commande échoue, toutes les autres commandes de la file d'attente seront traitées - Redis n'arrêtera pas le traitement de la commande.

Les transactions Redis ne prennent pas en charge le Rollback (souligné)

En fait, les commandes Redis peuvent échouer lors de l'exécution de la transaction, mais les commandes restantes continueront à être exécutées au lieu du Rollback (rollback de la transaction). Si vous avez utilisé des bases de données relationnelles, cette situation peut vous paraître étrange. Il existe cependant une bonne explication à cette situation :

Redis命令可能会执行失败,仅仅是由于错误的语法被调用(命令排队时检测不出来的错误),或者使用错误的数据类型操作某个Key: 这意味着,实际上失败的命令都是编程错误造成的,都是开发中能够被检测出来的,生产环境中不应该存在。(这番话,彻底甩锅,“都是你们自己编程错误,与我们无关”。)由于不必支持Rollback,Redis内部简洁并且更加高效。

“如果错误就是发生了呢?”这是一个反对Redis观点的争论。然而应该指出的是,通常情况下,回滚并不能挽救编程错误。鉴于没有人能够挽救程序员的错误,并且Redis命令失败所需的错误类型不太可能进入生产环境,所以我们选择了不支持错误回滚(Rollback)这种更简单快捷的方法。

清除命令队列

DISCARD被用来中止事务。事务中的所有命令将不会被执行,连接将恢复正常状态。

> SET foo 1
OK
> MULTI
OK
> INCR foo
QUEUED
> DISCARD
OK
> GET foo
"1"
Copier après la connexion

相关推荐:redis数据库教程

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

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 Comment effacer les données redis Apr 10, 2025 pm 10:06 PM

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.

Comment lire la file d'attente redis Comment lire la file d'attente redis Apr 10, 2025 pm 10:12 PM

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.

Comment utiliser la commande redis Comment utiliser la commande redis Apr 10, 2025 pm 08:45 PM

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).

Comment utiliser Redis Lock Comment utiliser Redis Lock Apr 10, 2025 pm 08:39 PM

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.

Comment lire le code source de Redis Comment lire le code source de Redis Apr 10, 2025 pm 08:27 PM

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.

Comment utiliser la ligne de commande redis Comment utiliser la ligne de commande redis Apr 10, 2025 pm 10:18 PM

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.

Comment résoudre la perte de données avec Redis Comment résoudre la perte de données avec Redis Apr 10, 2025 pm 08:24 PM

Les causes de la perte de données redis incluent les défaillances de mémoire, les pannes de courant, les erreurs humaines et les défaillances matérielles. Les solutions sont: 1. Stockez les données sur le disque avec RDB ou AOF Persistance; 2. Copiez sur plusieurs serveurs pour une haute disponibilité; 3. Ha avec Redis Sentinel ou Redis Cluster; 4. Créez des instantanés pour sauvegarder les données; 5. Mettre en œuvre les meilleures pratiques telles que la persistance, la réplication, les instantanés, la surveillance et les mesures de sécurité.

See all articles