Lua Academy · leksjon

SCRIPT LOAD og EVALSHA

Last inn skript med SCRIPT LOAD, og kjør dem med SHA1 for bedre effektivitet.

Leksjon 4 av 413 trinn

SCRIPT LOAD og EVALSHA er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 4 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.

Problemet med EVAL

EVAL sender hele skriptteksten ved hvert kall. For skript som kjøres ofte, sløser dette med båndbredde. SCRIPT LOAD + EVALSHA løser dette ved å laste inn skriptet én gang og kalle det med en SHA1-hash.

SCRIPT LOAD

SCRIPT LOAD script kompilerer skriptet, bufrer det i Redis og returnerer SHA1-hashen. Skriptet forblir bufret til serveren startes på nytt eller SCRIPT FLUSH kalles.

# Redis CLI:
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Returns: "abc123...sha1hash..."

EVALSHA

EVALSHA sha1 numkeys [keys] [args] kjører det tidligere innlastede skriptet som identifiseres av SHA1-hashen. Kommandoen mislykkes med NOSCRIPT hvis skriptet ikke er bufret.

# Redis CLI:
EVALSHA abc123...sha1hash... 1 mykey
# Returns the same result as EVAL

Mønster for applikasjoner

Ved oppstart av applikasjonen: Kjør SCRIPT LOAD for alle skript, og lagre SHA1-hashene deres. Bruk deretter EVALSHA for alle kall under kjøring.

local redis = require("redis")
local scriptText = [[
  local v = redis.call("GET", KEYS[1])
  return v
]]
local sha = redis:script_load(scriptText)
-- Later:
redis:evalsha(sha, 1, "mykey")

Håndtering av NOSCRIPT-feil

Hvis Redis startes på nytt, går bufrede skript tapt. Fang opp NOSCRIPT-feil, og fall tilbake til EVAL for å laste inn skriptet på nytt.

local function safeEvalsha(r, sha, script, numkeys, ...)
  local ok, result = pcall(r.evalsha, r, sha, numkeys, ...)
  if not ok and result:find("NOSCRIPT") then
    sha = r:script_load(script)
    result = r:evalsha(sha, numkeys, ...)
  end
  return result
end

SCRIPT EXISTS

SCRIPT EXISTS sha1 [sha1 ...] kontrollerer om skript er bufret. Kommandoen returnerer 1 for hvert bufrede skript og 0 for de som mangler. Bruk den til å forhåndslaste skript etter en omstart.

SCRIPT FLUSH

SCRIPT FLUSH fjerner alle bufrede skript fra Redis-minnet. Bruk den under utrullinger når skriptene endres.

Versjonshåndtering av skript

Når et skript endres, endres også SHA1-hashen. Lagre SHA1-hasher med versjonsnumre, og oppdater dem etter utrullingen.

Sparte båndbredde

For et skript på 500 byte som kalles 10 000 ganger per sekund, sparer EVALSHA 5 MB/s Redis-trafikk sammenlignet med EVAL. Det utgjør en betydelig forskjell i stor skala.

Redis Cluster med EVALSHA

I klyngemodus fungerer EVALSHA på samme måte som EVAL når det gjelder slot-begrensninger: alle KEYS må være i samme slot.

Beste praksis

Bruk alltid EVALSHA i produksjon etter at skriptene er lastet inn ved oppstart. Implementer reservehåndtering med NOSCRIPT for robusthet etter omstarter av Redis.

Spørsmål om EVALSHA

Hva bruker EVALSHA i stedet for skriptteksten?

Oppsummering: SCRIPT LOAD og EVALSHA

Last inn skript én gang med SCRIPT LOAD for å få en SHA1. Bruk EVALSHA for alle påfølgende kall for å spare båndbredde. Håndter NOSCRIPT-feil ved å laste inn skriptet på nytt. SCRIPT EXISTS kontrollerer bufferstatusen, og SCRIPT FLUSH tømmer bufferen.

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 «SCRIPT LOAD og EVALSHA» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «SCRIPT LOAD og EVALSHA», 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 «SCRIPT LOAD og EVALSHA»?

Last inn skript med SCRIPT LOAD, og kjør dem med SHA1 for bedre effektivitet. 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 4 av 4.

Hvor lang tid tar leksjonen «SCRIPT LOAD og EVALSHA»?

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