Ще бъда против приетия отговор, защото приетият отговор е грешен.
Въпреки че не можете изрично да дефинирате наименувани функции, можете извикайте всеки скрипт, който можете да извикате с EVALSHA . По-конкретно, всички Lua скриптове, които сте дефинирали изрично чрез SCRIPT LOAD или имплицитно чрез EVAL са налични в глобалното пространство от имена на Lua в f_<sha1 hash> (до/освен ако не извикате SCRIPT FLUSH ), на който можете да се обадите по всяко време.
Проблемът, с който се сблъсквате е, че функциите са дефинирани като не приемащи аргументи, а KEYS и ARGV таблиците всъщност са глобални. Така че, ако искате да можете да общувате между скриптове на Lua, трябва или да повредите вашите KEYS и ARGV таблици или трябва да използвате стандартното ключово пространство Redis за комуникация между вашите функции.
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>
Всичко това казано, това е в пълно нарушение на спецификацията и е напълно възможно да спрете да работите по странни начини, ако се опитате да стартирате това в сценарий на Redis клъстер.