Operazioni atomiche e transazioni
Utilizzi script Lua per eseguire operazioni Redis atomiche in più passaggi.
Operazioni atomiche e transazioni è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Perché eseguire operazioni atomiche composte da più passaggi?
Molti casi d'uso di Redis richiedono la lettura e la scrittura di più chiavi in un'unica operazione coerente. Senza atomicità, le condizioni di competizione possono danneggiare lo stato.
Condizione di competizione nella sequenza lettura-modifica-scrittura
In assenza di Lua: GET counter → modifica nel client → SET counter. Due client possono leggere entrambi lo stesso valore, modificarlo entrambi e il secondo SET sovrascrivere le modifiche del primo.
Soluzione con uno script Lua
Con Lua in Redis, la sequenza lettura-modifica-scrittura viene eseguita atomicamente all'interno del server.
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 5Confronto e sostituzione
Implementi CAS (confronto e sostituzione) atomicamente: aggiorni il valore solo se quello corrente è uguale a quello previsto.
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 newvalueLock distribuito
Acquisisca un lock atomicamente: SET key value NX EX seconds. Questo è il modello sicuro, equivalente in 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" 30Rilascio sicuro del lock
Rilasci il lock solo se ne è il proprietario. In questo modo impedisce a un altro client di rilasciare il lock di qualcun altro.
EVAL "
if redis.call('GET', KEYS[1]) == ARGV[1] then
return redis.call('DEL', KEYS[1])
end
return 0
" 1 lock:resource "owner-uuid"Transazioni su più chiavi
Gli script Lua possono operare atomicamente su più chiavi, cosa che MULTI/EXEC non può garantire (può fallire a metà, lasciando uno stato parziale).
MULTI/EXEC e Lua a confronto
MULTI/EXEC mette i comandi in coda per eseguirli in blocco, ma non è realmente atomico per quanto riguarda i valori letti (watch/unwatch aggiunge complessità). Gli script Lua sono più semplici e completamente atomici.
Rollback in Lua
Lua in Redis non supporta transazioni con rollback. Se si verifica un errore a metà dell'esecuzione, i comandi redis.call già eseguiti non vengono annullati. Progetti gli script in modo sicuro verificando prima le precondizioni.
Limiti alle dimensioni degli script
Gli script dovrebbero essere piccoli e rapidi. La logica complessa appartiene al livello applicativo, non a Redis. Utilizzi Lua solo per la sezione atomica.
Test dell'atomicità
Verifichi le condizioni di competizione con client Redis concorrenti. Verifichi che lo script Lua mantenga lo stato corretto in condizioni di elevata concorrenza usando gli strumenti di benchmark di Redis.
Domanda sulle operazioni atomiche
Perché una sequenza lettura-modifica-scrittura in uno script Lua di Redis è più sicura rispetto all'esecuzione nel codice dell'applicazione?
Riepilogo: operazioni atomiche e transazioni
Utilizzi gli script Lua di Redis per le operazioni atomiche di lettura-modifica-scrittura, CAS e locking distribuito. Gli script Lua sono più semplici e affidabili di MULTI/EXEC per le operazioni che dipendono dai valori letti. Mantenga gli script essenziali e li verifichi in condizioni di concorrenza.
Domande Frequenti
La lezione «Operazioni atomiche e transazioni» è gratuita?
Sì — il testo completo di «Operazioni atomiche e transazioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Operazioni atomiche e transazioni»?
Utilizzi script Lua per eseguire operazioni Redis atomiche in più passaggi. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Operazioni atomiche e transazioni»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- EVAL e ambiente Lua di Redis
- Operazioni atomiche e transazioni
- Limitazione della frequenza con Lua
- SCRIPT LOAD ed EVALSHA