0Pricing
Lua Academy · Lección

SCRIPT LOAD y EVALSHA

Cargue scripts con SCRIPT LOAD y ejecútelos mediante SHA1 para mejorar la eficiencia.

SCRIPT LOAD y EVALSHA es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

El problema de EVAL

EVAL envía el texto completo del script en cada llamada. En el caso de scripts que se ejecutan con frecuencia, esto desperdicia ancho de banda. SCRIPT LOAD + EVALSHA solucionan este problema cargando el script una vez y llamándolo mediante su hash SHA1.

SCRIPT LOAD

SCRIPT LOAD script compila el script, lo almacena en caché en Redis y devuelve su hash SHA1. El script permanece en caché hasta que se reinicia el servidor o se ejecuta SCRIPT FLUSH.

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

EVALSHA

EVALSHA sha1 numkeys [keys] [args] ejecuta el script cargado anteriormente e identificado por su SHA1. Falla con NOSCRIPT si el script no está en caché.

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

Patrón de la aplicación

Al iniciar la aplicación: ejecute SCRIPT LOAD para cargar todos los scripts y almacene sus SHA1. Después, utilice EVALSHA en todas las llamadas durante la ejecución.

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")

Gestión del error NOSCRIPT

Si se reinicia Redis, se pierden los scripts almacenados en caché. Capture los errores NOSCRIPT y recurra a EVAL para volver a cargarlos.

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 ...] comprueba si los scripts están almacenados en caché. Devuelve 1 por cada script almacenado en caché y 0 por cada script que falta. Utilícelo para precargar la caché después de un reinicio.

SCRIPT FLUSH

SCRIPT FLUSH elimina de la memoria de Redis todos los scripts almacenados en caché. Utilícelo durante los despliegues cuando cambien los scripts.

Control de versiones de scripts

Cuando cambia un script, también cambia su SHA1. Almacene los SHA1 junto con los números de versión y actualícelos después del despliegue.

Ahorro de ancho de banda

Para un script de 500 bytes llamado 10 000 veces por segundo, EVALSHA ahorra 5 MB/s de tráfico de Redis frente a EVAL. La diferencia es significativa a gran escala.

Redis Cluster con EVALSHA

En el modo de clúster, EVALSHA funciona igual que EVAL con respecto a las restricciones de ranuras: todas las KEYS deben encontrarse en la misma ranura.

Práctica recomendada

Utilice siempre EVALSHA en producción después de cargar los scripts al iniciar la aplicación. Implemente la alternativa NOSCRIPT para mantener la resiliencia después de reinicios de Redis.

Pregunta sobre EVALSHA

¿Qué utiliza EVALSHA en lugar del texto del script?

Repaso: SCRIPT LOAD y EVALSHA

Cargue los scripts una vez con SCRIPT LOAD para obtener un SHA1. Utilice EVALSHA en todas las llamadas posteriores para ahorrar ancho de banda. Gestione los errores NOSCRIPT volviendo a cargar los scripts. SCRIPT EXISTS comprueba el estado de la caché; SCRIPT FLUSH la vacía.

Preguntas frecuentes

¿La lección «SCRIPT LOAD y EVALSHA» es gratis?

Sí — el texto completo de «SCRIPT LOAD y EVALSHA» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «SCRIPT LOAD y EVALSHA»?

Cargue scripts con SCRIPT LOAD y ejecútelos mediante SHA1 para mejorar la eficiencia. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «SCRIPT LOAD y EVALSHA»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. EVAL y el entorno Lua de Redis
  2. Operaciones atómicas y transacciones
  3. Limitación de frecuencia con Lua
  4. SCRIPT LOAD y EVALSHA
← Volver a Lua Academy