SCRIPT LOAD e EVALSHA
Carregue scripts com SCRIPT LOAD e execute-os por SHA1 para obter eficiência.
SCRIPT LOAD e EVALSHA é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
O problema com EVAL
EVAL envia o texto completo do script em cada chamada. Para scripts executados com frequência, isso desperdiça largura de banda. SCRIPT LOAD + EVALSHA resolvem esse problema carregando o script uma vez e chamando-o pelo hash SHA1.
SCRIPT LOAD
SCRIPT LOAD script compila o script, armazena-o em cache no Redis e retorna seu hash SHA1. O script permanece em cache até que o servidor seja reiniciado ou SCRIPT FLUSH seja chamado.
# Redis CLI:
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Returns: "abc123...sha1hash..."EVALSHA
EVALSHA sha1 numkeys [keys] [args] executa o script carregado anteriormente identificado pelo seu SHA1. Falha com NOSCRIPT se o script não estiver em cache.
# Redis CLI:
EVALSHA abc123...sha1hash... 1 mykey
# Returns the same result as EVALPadrão da aplicação
Na inicialização da aplicação: carregue todos os scripts com SCRIPT LOAD e armazene seus SHA1. Depois, use EVALSHA em todas as chamadas durante a execução.
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")Tratamento do erro NOSCRIPT
Se o Redis for reiniciado, os scripts armazenados em cache serão perdidos. Capture os erros NOSCRIPT e recorra a EVAL para carregá-los novamente.
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 os scripts estão em cache. Retorna 1 para cada script armazenado em cache e 0 para os ausentes. Use-o para pré-carregar o cache após uma reinicialização.
SCRIPT FLUSH
SCRIPT FLUSH remove da memória do Redis todos os scripts armazenados em cache. Use-o durante implantações quando os scripts forem alterados.
Versionamento de scripts
Quando um script é alterado, seu SHA1 também muda. Armazene os SHA1 com números de versão e atualize-os após a implantação.
Economia de largura de banda
Para um script de 500 bytes chamado 10.000 vezes por segundo, EVALSHA economiza 5 MB/s de tráfego do Redis em comparação com EVAL. Isso é significativo em grande escala.
Cluster Redis com EVALSHA
No modo de cluster, EVALSHA funciona da mesma forma que EVAL em relação às restrições de slots: todas as KEYS devem estar no mesmo slot.
Prática recomendada
Use sempre EVALSHA em produção depois de carregar os scripts na inicialização. Implemente o fallback de NOSCRIPT para garantir a resiliência após reinicializações do Redis.
Pergunta sobre EVALSHA
O que EVALSHA usa no lugar do texto do script?
Recapitulação: SCRIPT LOAD e EVALSHA
Carregue os scripts uma vez com SCRIPT LOAD para obter um SHA1. Use EVALSHA em todas as chamadas seguintes para economizar largura de banda. Trate os erros NOSCRIPT recarregando os scripts. SCRIPT EXISTS verifica o estado do cache; SCRIPT FLUSH o limpa.
Perguntas Frequentes
A aula “SCRIPT LOAD e EVALSHA” é grátis?
Sim — o texto completo de “SCRIPT LOAD e EVALSHA” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “SCRIPT LOAD e EVALSHA”?
Carregue scripts com SCRIPT LOAD e execute-os por SHA1 para obter eficiência. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “SCRIPT LOAD e EVALSHA”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- EVAL e ambiente Lua do Redis
- Operações atômicas e transações
- Limitação de taxa com Lua
- SCRIPT LOAD e EVALSHA