Atomaire bewerkingen en transacties
Gebruik Lua-scripts om meerstaps-Redis-bewerkingen atomair uit te voeren
Atomaire bewerkingen en transacties is een gratis Lua Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.
Waarom atomische bewerkingen in meerdere stappen?
Veel toepassingen van Redis vereisen dat meerdere sleutels in één consistente bewerking worden gelezen en geschreven. Zonder atomiciteit kunnen racecondities de toestand beschadigen.
De raceconditie bij lezen-wijzigen-schrijven
Zonder Lua: GET counter → wijzigen in de client → SET counter. Twee clients kunnen dezelfde waarde lezen, die allebei wijzigen, waarna de tweede SET de wijzigingen van de eerste overschrijft.
Oplossing met een Lua-script
Met Lua in Redis gebeurt lezen-wijzigen-schrijven atomair binnen de 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 5Vergelijken en omwisselen
Implementeer CAS (vergelijken en omwisselen) atomair — werk alleen bij als de huidige waarde gelijk is aan de verwachte waarde.
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 newvalueGedistribueerde vergrendeling
Verkrijg atomair een vergrendeling: SET key value NX EX seconds. Dit is het veilige patroon — het Lua-equivalent.
EVAL "
if redis.call('SET', KEYS[1], ARGV[1], 'NX', 'EX', ARGV[2]) then
return 1
end
return 0
" 1 lock:resource "owner-uuid" 30De vergrendeling veilig vrijgeven
Geef de vergrendeling alleen vrij als je de eigenaar bent. Zo voorkom je dat een andere client de vergrendeling van iemand anders vrijgeeft.
EVAL "
if redis.call('GET', KEYS[1]) == ARGV[1] then
return redis.call('DEL', KEYS[1])
end
return 0
" 1 lock:resource "owner-uuid"Transacties met meerdere sleutels
Lua-scripts kunnen atomair op meerdere sleutels werken — iets wat MULTI/EXEC niet kan garanderen (het kan halverwege mislukken, waardoor een gedeeltelijke toestand achterblijft).
MULTI/EXEC in vergelijking met Lua
MULTI/EXEC zet opdrachten in een wachtrij voor uitvoering in een batch, maar is niet echt atomair wat gelezen waarden betreft (watch/unwatch maakt het complexer). Lua-scripts zijn eenvoudiger en volledig atomair.
Terugdraaien in Lua
Redis Lua ondersteunt geen transacties met terugdraaien. Als halverwege een fout optreedt, worden eerder uitgevoerde redis.call-opdrachten niet teruggedraaid. Ontwerp scripts veilig door eerst de voorwaarden te controleren.
Limieten voor scriptgrootte
Scripts moeten klein en snel zijn. Complexe logica hoort in de toepassingslaag, niet in Redis. Gebruik Lua alleen voor het atomische gedeelte.
Atomiciteit testen
Test racecondities met gelijktijdige Redis-clients. Controleer met benchmarkhulpmiddelen van Redis of het Lua-script bij hoge gelijktijdigheid de juiste toestand behoudt.
Vraag over atomische bewerkingen
Waarom is lezen-wijzigen-schrijven in een Redis-Lua-script veiliger dan dezelfde bewerking in toepassingscode uitvoeren?
Samenvatting: atomische bewerkingen en transacties
Gebruik Redis-Lua-scripts voor atomisch lezen-wijzigen-schrijven, CAS en gedistribueerde vergrendeling. Lua-scripts zijn eenvoudiger en correcter dan MULTI/EXEC voor bewerkingen die afhankelijk zijn van gelezen waarden. Houd scripts minimaal en test ze bij gelijktijdige uitvoering.
Leer Lua met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 40
- Lessen
- 159
Veelgestelde vragen
Is de les “Atomaire bewerkingen en transacties” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Atomaire bewerkingen en transacties”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.
Wat leer ik in “Atomaire bewerkingen en transacties”?
Gebruik Lua-scripts om meerstaps-Redis-bewerkingen atomair uit te voeren Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Lua Academy te beginnen?
Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Atomaire bewerkingen en transacties”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Lua Academy?
Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- EVAL en de Redis Lua-omgeving
- Atomaire bewerkingen en transacties
- Rate limiting met Lua
- SCRIPT LOAD en EVALSHA