0Pricing
Lua Academy · Leçon

Opérations atomiques et transactions

Utilisez des scripts Lua pour effectuer des opérations Redis atomiques en plusieurs étapes.

Opérations atomiques et transactions est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Pourquoi effectuer plusieurs opérations de manière atomique ?

De nombreux cas d'utilisation de Redis nécessitent de lire et d'écrire plusieurs clés au cours d'une seule opération cohérente. Sans atomicité, les conditions de concurrence corrompent l'état.

Condition de concurrence lors de la lecture-modification-écriture

Sans Lua : GET counter → modification dans le client → SET counter. Deux clients peuvent lire la même valeur, la modifier tous les deux, puis le deuxième SET écrase les modifications du premier.

Correction avec un script Lua

Avec Lua dans Redis, la séquence lecture-modification-écriture s'effectue de manière atomique sur le serveur.

EVAL "
local val = redis.call('GET', KEYS[1])
val = tonumber(val) or 0
val = val + tonumber(ARGV[1])
redis.call('SET', KEYS[1], val)
return val
" 1 counter 5

Comparaison et échange

Implémentez CAS (comparaison et échange) de manière atomique : mettez à jour la valeur uniquement si la valeur actuelle est égale à la valeur attendue.

EVAL "
local cur = redis.call('GET', KEYS[1])
if cur == ARGV[1] then
  redis.call('SET', KEYS[1], ARGV[2])
  return 1
end
return 0
" 1 mykey expected newvalue

Verrou distribué

Acquérez un verrou de manière atomique : SET key value NX EX seconds. Il s'agit du modèle sûr, équivalent en Lua.

EVAL "
if redis.call('SET', KEYS[1], ARGV[1], 'NX', 'EX', ARGV[2]) then
  return 1
end
return 0
" 1 lock:resource "owner-uuid" 30

Libérer le verrou en toute sécurité

Ne libérez le verrou que si vous en êtes le propriétaire. Vous empêchez ainsi un autre client de libérer le verrou de quelqu'un d'autre.

EVAL "
if redis.call('GET', KEYS[1]) == ARGV[1] then
  return redis.call('DEL', KEYS[1])
end
return 0
" 1 lock:resource "owner-uuid"

Transactions sur plusieurs clés

Les scripts Lua peuvent agir de manière atomique sur plusieurs clés, ce que MULTI/EXEC ne peut pas garantir (il peut échouer en cours d'exécution et laisser un état partiel).

MULTI/EXEC ou Lua

MULTI/EXEC met les commandes en file pour une exécution groupée, mais n'est pas réellement atomique en ce qui concerne les valeurs lues (watch/unwatch ajoute de la complexité). Les scripts Lua sont plus simples et entièrement atomiques.

Annuler les modifications dans Lua

Lua dans Redis ne prend pas en charge les transactions avec annulation. Si une erreur survient en cours d'exécution, les commandes redis.call déjà exécutées ne sont pas inversées. Concevez les scripts de manière sûre en vérifiant d'abord les préconditions.

Limites de taille des scripts

Les scripts doivent être courts et rapides. La logique complexe doit rester dans la couche applicative, et non dans Redis. Utilisez Lua uniquement pour la section atomique.

Tester l'atomicité

Testez les conditions de concurrence avec des clients Redis simultanés. Vérifiez que le script Lua conserve un état correct sous forte concurrence à l'aide des outils de référence Redis.

Question sur les opérations atomiques

Pourquoi une séquence lecture-modification-écriture dans un script Lua Redis est-elle plus sûre que lorsqu'elle est effectuée dans le code de l'application ?

Récapitulatif : opérations atomiques et transactions

Utilisez les scripts Lua Redis pour effectuer de manière atomique des séquences lecture-modification-écriture, CAS et le verrouillage distribué. Les scripts Lua sont plus simples et plus fiables que MULTI/EXEC pour les opérations qui dépendent des valeurs lues. Gardez les scripts minimaux et testez-les sous concurrence.

Questions Fréquemment Posées

La leçon « Opérations atomiques et transactions » est-elle gratuite ?

Oui — le texte complet de « Opérations atomiques et transactions » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Opérations atomiques et transactions » ?

Utilisez des scripts Lua pour effectuer des opérations Redis atomiques en plusieurs étapes. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Opérations atomiques et transactions » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. EVAL et environnement Lua de Redis
  2. Opérations atomiques et transactions
  3. Limitation du débit avec Lua
  4. SCRIPT LOAD et EVALSHA
← Retour à Lua Academy