SCRIPT LOAD und EVALSHA
Laden Sie Skripte mit SCRIPT LOAD und führen Sie sie zur Effizienzsteigerung per SHA1 aus
SCRIPT LOAD und EVALSHA ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Das Problem mit EVAL
EVAL sendet bei jedem Aufruf den vollständigen Skripttext. Bei häufig ausgeführten Skripten wird dadurch Bandbreite verschwendet. SCRIPT LOAD + EVALSHA lösen dieses Problem, indem das Skript einmal geladen und anschließend über seinen SHA1-Hash aufgerufen wird.
SCRIPT LOAD
SCRIPT LOAD script kompiliert das Skript, speichert es in Redis zwischen und gibt seinen SHA1-Hash zurück. Das Skript bleibt zwischengespeichert, bis der Server neu gestartet oder SCRIPT FLUSH aufgerufen wird.
# Redis CLI:
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Returns: "abc123...sha1hash..."EVALSHA
EVALSHA sha1 numkeys [keys] [args] führt das zuvor geladene Skript aus, das durch seinen SHA1-Wert identifiziert wird. Der Befehl schlägt mit NOSCRIPT fehl, wenn das Skript nicht zwischengespeichert ist.
# Redis CLI:
EVALSHA abc123...sha1hash... 1 mykey
# Returns the same result as EVALMuster für die Anwendung
Beim Start der Anwendung: Laden Sie alle Skripte mit SCRIPT LOAD und speichern Sie ihre SHA1-Werte. Verwenden Sie anschließend für alle Aufrufe zur Laufzeit EVALSHA.
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")NOSCRIPT-Fehler behandeln
Wenn Redis neu gestartet wird, gehen zwischengespeicherte Skripte verloren. Fangen Sie NOSCRIPT-Fehler ab und greifen Sie auf EVAL zurück, um das Skript erneut zu laden.
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
endSCRIPT EXISTS
SCRIPT EXISTS sha1 [sha1 ...] prüft, ob Skripte zwischengespeichert sind. Für jedes zwischengespeicherte Skript wird 1 und für jedes fehlende Skript 0 zurückgegeben. Verwenden Sie den Befehl, um den Cache nach einem Neustart vorzuwärmen.
SCRIPT FLUSH
SCRIPT FLUSH entfernt alle zwischengespeicherten Skripte aus dem Redis-Speicher. Verwenden Sie den Befehl bei Deployments, wenn sich Skripte ändern.
Skriptversionierung
Wenn sich ein Skript ändert, ändert sich auch sein SHA1-Wert. Speichern Sie SHA1-Werte zusammen mit Versionsnummern und aktualisieren Sie sie nach dem Deployment.
Bandbreiteneinsparungen
Bei einem 500 Byte großen Skript, das 10.000-mal pro Sekunde aufgerufen wird, spart EVALSHA im Vergleich zu EVAL 5 MB/s an Redis-Datenverkehr. Bei großer Skalierung ist das erheblich.
Redis Cluster mit EVALSHA
Im Cluster-Modus funktioniert EVALSHA hinsichtlich der Slot-Einschränkungen genauso wie EVAL: Alle KEYS müssen sich im selben Slot befinden.
Best Practice
Verwenden Sie in der Produktion nach dem Laden der Skripte beim Start immer EVALSHA. Implementieren Sie für mehr Ausfallsicherheit nach Redis-Neustarts einen NOSCRIPT-Fallback.
EVALSHA-Frage
Was verwendet EVALSHA anstelle des Skripttexts?
Zusammenfassung: SCRIPT LOAD und EVALSHA
Laden Sie Skripte einmalig mit SCRIPT LOAD, um einen SHA1-Wert zu erhalten. Verwenden Sie für alle nachfolgenden Aufrufe EVALSHA, um Bandbreite zu sparen. Behandeln Sie NOSCRIPT-Fehler durch erneutes Laden. SCRIPT EXISTS prüft den Cache-Status; SCRIPT FLUSH leert den Cache.
Häufig gestellte Fragen
Ist die Lektion „SCRIPT LOAD und EVALSHA“ kostenlos?
Ja — der vollständige Text von „SCRIPT LOAD und EVALSHA“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „SCRIPT LOAD und EVALSHA“?
Laden Sie Skripte mit SCRIPT LOAD und führen Sie sie zur Effizienzsteigerung per SHA1 aus Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „SCRIPT LOAD und EVALSHA“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- EVAL und die Redis-Lua-Umgebung
- Atomare Operationen und Transaktionen
- Ratenbegrenzung mit Lua
- SCRIPT LOAD und EVALSHA