SCRIPT LOAD et EVALSHA
Chargez des scripts avec SCRIPT LOAD et exécutez-les par SHA1 pour gagner en efficacité.
SCRIPT LOAD et EVALSHA est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Le problème avec EVAL
EVAL envoie le texte complet du script à chaque appel. Pour les scripts exécutés fréquemment, cela gaspille de la bande passante. SCRIPT LOAD + EVALSHA résolvent ce problème en chargeant le script une seule fois, puis en l'appelant à l'aide de son hachage SHA1.
SCRIPT LOAD
SCRIPT LOAD script compile le script, le met en cache dans Redis et renvoie son hachage SHA1. Le script reste en cache jusqu'au redémarrage du serveur ou à l'exécution de SCRIPT FLUSH.
# Redis CLI:
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Returns: "abc123...sha1hash..."EVALSHA
EVALSHA sha1 numkeys [keys] [args] exécute le script précédemment chargé et identifié par son SHA1. La commande échoue avec NOSCRIPT si le script n'est pas en cache.
# Redis CLI:
EVALSHA abc123...sha1hash... 1 mykey
# Returns the same result as EVALModèle d'utilisation dans l'application
Au démarrage de l'application : exécutez SCRIPT LOAD pour tous les scripts et stockez leurs SHA1. Utilisez ensuite EVALSHA pour tous les appels en cours d'exécution.
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")Gérer l'erreur NOSCRIPT
En cas de redémarrage de Redis, les scripts mis en cache sont perdus. Interceptez les erreurs NOSCRIPT et utilisez EVAL comme solution de repli pour recharger les scripts.
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 ...] vérifie si les scripts sont en cache. La commande renvoie 1 pour chaque script mis en cache et 0 pour ceux qui sont absents. Utilisez-la pour préchauffer le cache après un redémarrage.
SCRIPT FLUSH
SCRIPT FLUSH supprime de la mémoire Redis tous les scripts mis en cache. Utilisez-la lors des déploiements où les scripts changent.
Gestion des versions des scripts
Lorsqu'un script change, son SHA1 change également. Stockez les SHA1 avec des numéros de version et mettez-les à jour après le déploiement.
Économies de bande passante
Pour un script de 500 octets appelé 10 000 fois par seconde, EVALSHA économise 5 Mo/s de trafic Redis par rapport à EVAL. Le gain est important à grande échelle.
Cluster Redis avec EVALSHA
En mode cluster, EVALSHA fonctionne comme EVAL en ce qui concerne les restrictions d'emplacement : toutes les clés KEYS doivent se trouver dans le même emplacement.
Bonne pratique
Utilisez toujours EVALSHA en production après avoir chargé les scripts au démarrage. Implémentez la solution de repli NOSCRIPT pour garantir la résilience après les redémarrages de Redis.
Question sur EVALSHA
Qu'utilise EVALSHA à la place du texte du script ?
Récapitulatif : SCRIPT LOAD et EVALSHA
Chargez les scripts une seule fois avec SCRIPT LOAD pour obtenir un SHA1. Utilisez EVALSHA pour tous les appels suivants afin d'économiser de la bande passante. Gérez les erreurs NOSCRIPT en rechargeant les scripts. SCRIPT EXISTS vérifie l'état du cache ; SCRIPT FLUSH le vide.
Questions Fréquemment Posées
La leçon « SCRIPT LOAD et EVALSHA » est-elle gratuite ?
Oui — le texte complet de « SCRIPT LOAD et EVALSHA » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « SCRIPT LOAD et EVALSHA » ?
Chargez des scripts avec SCRIPT LOAD et exécutez-les par SHA1 pour gagner en efficacité. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « SCRIPT LOAD et EVALSHA » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- EVAL et environnement Lua de Redis
- Opérations atomiques et transactions
- Limitation du débit avec Lua
- SCRIPT LOAD et EVALSHA