Lua Academy · leksjon

Atomiske operasjoner og transaksjoner

Bruk Lua-skript til å utføre atomiske Redis-operasjoner i flere trinn.

Leksjon 2 av 413 trinn

Atomiske operasjoner og transaksjoner er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hvorfor atomiske operasjoner i flere trinn?

Mange bruksområder for Redis krever at flere nøkler leses og skrives i én konsistent operasjon. Uten atomisitet kan kappløpstilstander ødelegge tilstanden.

Kappløpstilstanden ved les–endre–skriv

Uten Lua: GET counter → endre i klienten → SET counter. To klienter kan begge lese samme verdi, begge endre den, og den andre SET-kommandoen overskriver endringene fra den første.

Løsning med Lua-skript

Med Lua i Redis skjer lesingen, endringen og skrivingen 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

Compare-and-swap

Implementer CAS (compare-and-swap) atomisk – oppdater bare hvis den gjeldende verdien er lik 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

Distribuert lås

Hent en lås atomisk: SET key value NX EX seconds. Dette er det trygge mønsteret – Lua-ekvivalenten.

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

Trygg frigivelse av låsen

Frigi bare låsen hvis du eier den. Dette hindrer en annen klient i å frigi låsen til noen andre.

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

Transaksjoner med flere nøkler

Lua-skript kan operere atomisk på flere nøkler – noe MULTI/EXEC ikke kan garantere (det kan mislykkes underveis og etterlate en delvis tilstand).

MULTI/EXEC kontra Lua

MULTI/EXEC legger kommandoer i kø for samlet kjøring, men er ikke virkelig atomisk når det gjelder leste verdier (watch/unwatch gjør det mer komplekst). Lua-skript er enklere og fullt atomiske.

Tilbakerulling i Lua

Redis Lua støtter ikke transaksjoner med tilbakerulling. Hvis det oppstår en feil underveis, blir tidligere utførte redis.call-kommandoer ikke omgjort. Utform skript slik at de er trygge, ved å kontrollere forhåndsbetingelser først.

Grenser for skriptstørrelse

Skript bør være små og raske. Komplisert logikk hører hjemme i applikasjonslaget, ikke i Redis. Bruk Lua bare for den atomiske delen.

Testing av atomisitet

Test kappløpstilstander med samtidige Redis-klienter. Bekreft at Lua-skriptet opprettholder riktig tilstand under høy samtidighet ved hjelp av verktøyene for Redis-benchmarking.

Spørsmål om atomiske operasjoner

Hvorfor er en les–endre–skriv-operasjon i et Redis Lua-skript tryggere enn å utføre den i applikasjonskoden?

Oppsummering: Atomiske operasjoner og transaksjoner

Bruk Redis Lua-skript for atomisk les–endre–skriv, CAS og distribuert låsing. Lua-skript er enklere og mer korrekte enn MULTI/EXEC for operasjoner som avhenger av leste verdier. Hold skriptene minimale, og test dem under samtidighet.

Gratis å komme i gang

Lær deg Lua med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
40
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «Atomiske operasjoner og transaksjoner» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Atomiske operasjoner og transaksjoner», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Atomiske operasjoner og transaksjoner»?

Bruk Lua-skript til å utføre atomiske Redis-operasjoner i flere trinn. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lua Academy?

Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Atomiske operasjoner og transaksjoner»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?

Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. EVAL og Redis Lua-miljøet
  2. Atomiske operasjoner og transaksjoner
  3. Frekvensbegrensning med Lua
  4. SCRIPT LOAD og EVALSHA
← Tilbake til Lua Academy