Lua Academy · Lektion

Atomare operationer og transaktioner

Brug Lua-scripts til at udføre atomare Redis-operationer i flere trin.

Lektion 2 af 413 trin

Atomare operationer og transaktioner er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvorfor atomiske operationer i flere trin?

Mange anvendelser af Redis kræver, at flere nøgler læses og skrives i én konsistent operation. Uden atomicitet kan kapløbstilstande ødelægge tilstanden.

Kapløbstilstanden ved læs-ændr-skriv

Uden Lua: GET counter → ændr i klienten → SET counter. To klienter kan begge læse den samme værdi, begge ændre den, hvorefter den anden SET overskriver den førstes ændringer.

Løsning med Lua-script

Med Lua i Redis foregår læs-ændr-skriv atomisk på serveren.

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

Sammenlign-og-erstat

Implementér CAS (sammenlign-og-erstat) atomisk – opdatér kun, hvis den aktuelle værdi er lig med den forventede.

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

Distribueret lås

Hent en lås atomisk: SET key value NX EX seconds. Dette er det sikre mønster – Lua-ækvivalenten.

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

Sikker frigivelse af låsen

Frigiv kun låsen, hvis du ejer den. Det forhindrer en anden klient i at frigive en andens lås.

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

Transaktioner med flere nøgler

Lua-scripts kan arbejde atomisk på flere nøgler – noget MULTI/EXEC ikke kan garantere (det kan mislykkes undervejs og efterlade en delvist opdateret tilstand).

MULTI/EXEC kontra Lua

MULTI/EXEC sætter kommandoer i kø til samlet udførelse, men er ikke reelt atomisk med hensyn til læste værdier (watch/unwatch gør det mere komplekst). Lua-scripts er enklere og fuldt atomiske.

Tilbagerulning i Lua

Redis Lua understøtter ikke transaktioner med tilbagerulning. Hvis der opstår en fejl undervejs, omgøres tidligere udførte redis.call-kommandoer ikke. Design scripts, så de er sikre, ved først at kontrollere forudsætningerne.

Grænser for scriptstørrelse

Scripts bør være små og hurtige. Komplex logik hører hjemme i applikationslaget, ikke i Redis. Brug kun Lua til den atomiske del.

Test af atomicitet

Test kapløbstilstande med samtidige Redis-klienter. Kontrollér, at Lua-scriptet bevarer den korrekte tilstand under høj samtidighed ved hjælp af Redis' benchmarkværktøjer.

Spørgsmål om atomiske operationer

Hvorfor er læs-ændr-skriv i et Redis Lua-script sikrere end at gøre det i applikationskoden?

Opsummering: Atomiske operationer og transaktioner

Brug Redis Lua-scripts til atomisk læs-ændr-skriv, CAS og distribueret låsning. Lua-scripts er enklere og mere korrekte end MULTI/EXEC til operationer, der afhænger af læste værdier. Hold scripts minimale, og test dem under samtidighed.

Gratis at komme i gang

Lær Lua med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
40
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Atomare operationer og transaktioner” gratis?

Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Atomare operationer og transaktioner”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Atomare operationer og transaktioner”?

Brug Lua-scripts til at udføre atomare Redis-operationer i flere trin. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lua Academy?

Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Atomare operationer og transaktioner”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lua Academy-lektion?

Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. EVAL og Redis' Lua-miljø
  2. Atomare operationer og transaktioner
  3. Ratebegrænsning med Lua
  4. SCRIPT LOAD og EVALSHA
← Tilbage til Lua Academy