Będę sprzeczny z zaakceptowaną odpowiedzią, ponieważ zaakceptowana odpowiedź jest błędna.
Chociaż nie możesz jawnie zdefiniować nazwanych funkcji, możesz wywołaj dowolny skrypt, który możesz wywołać za pomocą EVALSHA . Dokładniej, wszystkie skrypty Lua, które zostały wyraźnie zdefiniowane przez SCRIPT LOAD lub niejawnie przez EVAL są dostępne w globalnej przestrzeni nazw Lua pod adresem f_<sha1 hash> (dopóki/chyba że zadzwonisz SCRIPT FLUSH ), które możesz zadzwonić w dowolnym momencie.
Problem, z którym się spotykasz, polega na tym, że funkcje są zdefiniowane jako nie przyjmujące argumentów, a KEYS i ARGV tabele są w rzeczywistości globalami. Więc jeśli chcesz mieć możliwość komunikowania się między skryptami Lua, musisz albo pokiereszować swoje KEYS i ARGV tabele lub musisz użyć standardowego obszaru klawiszy Redis do komunikacji między funkcjami.
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>
Wszystko to powiedziawszy, jest to całkowite naruszenie specyfikacji i jest całkowicie możliwe, aby przestać działać w dziwny sposób, jeśli spróbujesz uruchomić to w scenariuszu klastra Redis.