SCRIPT LOAD ed EVALSHA
Carichi gli script con SCRIPT LOAD ed esegua le versioni SHA1 per maggiore efficienza.
SCRIPT LOAD ed EVALSHA è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Il problema di EVAL
EVAL invia il testo completo dello script a ogni chiamata. Per gli script eseguiti frequentemente, questo spreca larghezza di banda. SCRIPT LOAD + EVALSHA risolvono il problema caricando lo script una sola volta e chiamandolo tramite l'hash SHA1.
SCRIPT LOAD
SCRIPT LOAD script compila lo script, lo memorizza nella cache di Redis e restituisce il relativo hash SHA1. Lo script rimane nella cache finché il server non viene riavviato o non viene chiamato SCRIPT FLUSH.
# Redis CLI:
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Returns: "abc123...sha1hash..."EVALSHA
EVALSHA sha1 numkeys [keys] [args] esegue lo script precedentemente caricato e identificato dal relativo SHA1. Restituisce un errore NOSCRIPT se lo script non è nella cache.
# Redis CLI:
EVALSHA abc123...sha1hash... 1 mykey
# Returns the same result as EVALModello applicativo
All'avvio dell'applicazione: esegua SCRIPT LOAD per tutti gli script e ne memorizzi gli SHA1. Utilizzi quindi EVALSHA per tutte le chiamate a runtime.
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")Gestione dell'errore NOSCRIPT
Se Redis viene riavviato, gli script memorizzati nella cache vanno persi. Intercetti gli errori NOSCRIPT e ricorra a EVAL per ricaricare lo script.
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 ...] verifica se gli script sono memorizzati nella cache. Restituisce 1 per ogni script presente nella cache e 0 per quelli mancanti. Lo utilizzi per precaricare gli script dopo un riavvio.
SCRIPT FLUSH
SCRIPT FLUSH rimuove dalla memoria di Redis tutti gli script memorizzati nella cache. Lo utilizzi durante i deployment quando gli script cambiano.
Versionamento degli script
Quando uno script cambia, cambia anche il suo SHA1. Memorizzi gli SHA1 insieme ai numeri di versione e li aggiorni dopo il deployment.
Risparmio di larghezza di banda
Per uno script di 500 byte chiamato 10.000 volte al secondo, EVALSHA fa risparmiare 5 MB/s di traffico Redis rispetto a EVAL. Il risparmio è significativo su larga scala.
Redis Cluster con EVALSHA
In modalità cluster, EVALSHA funziona come EVAL per quanto riguarda i vincoli sugli slot: tutte le KEYS devono trovarsi nello stesso slot.
Buona pratica
Utilizzi sempre EVALSHA in produzione dopo aver caricato gli script all'avvio. Implementi il fallback a NOSCRIPT per garantire la resilienza dopo i riavvii di Redis.
Domanda su EVALSHA
Che cosa utilizza EVALSHA al posto del testo dello script?
Riepilogo: SCRIPT LOAD ed EVALSHA
Carichi gli script una sola volta con SCRIPT LOAD per ottenere uno SHA1. Utilizzi EVALSHA per tutte le chiamate successive, così da risparmiare larghezza di banda. Gestisca gli errori NOSCRIPT ricaricando lo script. SCRIPT EXISTS verifica lo stato della cache; SCRIPT FLUSH la svuota.
Domande Frequenti
La lezione «SCRIPT LOAD ed EVALSHA» è gratuita?
Sì — il testo completo di «SCRIPT LOAD ed EVALSHA» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «SCRIPT LOAD ed EVALSHA»?
Carichi gli script con SCRIPT LOAD ed esegua le versioni SHA1 per maggiore efficienza. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «SCRIPT LOAD ed EVALSHA»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- EVAL e ambiente Lua di Redis
- Operazioni atomiche e transazioni
- Limitazione della frequenza con Lua
- SCRIPT LOAD ed EVALSHA