Eu vou ser contrário à resposta aceita, porque a resposta aceita está errada.
Embora você não possa definir explicitamente funções nomeadas, você pode chame qualquer script que você possa chamar com
EVALSHA . Mais especificamente, todos os scripts Lua que você definiu explicitamente via SCRIPT LOAD ou implicitamente via EVAL estão disponíveis no namespace Lua global em f_<sha1 hash> (até/a menos que você chame SCRIPT FLUSH ), que você pode chamar a qualquer momento. O problema que você encontra é que as funções são definidas como sem argumentos, e as
KEYS e ARGV tabelas são realmente globais. Então, se você quiser se comunicar entre scripts Lua, você precisa desmontar suas KEYS e ARGV tabelas, ou você precisa usar o keyspace padrão do Redis para comunicação entre suas funções. 127.0.0.1:6379> script load "return {KEYS[1], ARGV[1]}"
"d006f1a90249474274c76f5be725b8f5804a346b"
127.0.0.1:6379> eval "return f_d006f1a90249474274c76f5be725b8f5804a346b()" 1 "hello" "world"
1) "hello"
2) "world"
127.0.0.1:6379> eval "KEYS[1] = 'blah!'; return f_d006f1a90249474274c76f5be725b8f5804a346b()" 1 "hello" "world"
1) "blah!"
2) "world"
127.0.0.1:6379>
Tudo isso dito, isso é uma violação completa da especificação e é totalmente possível parar de funcionar de maneiras estranhas se você tentar executar isso em um cenário de cluster Redis.