Ще бъда против приетия отговор, защото приетият отговор е грешен.
Въпреки че не можете изрично да дефинирате наименувани функции, можете извикайте всеки скрипт, който можете да извикате с 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 клъстер.