受け入れられた答えが間違っているので、私は受け入れられた答えに反するつもりです。
名前付き関数を明示的に定義することはできませんが、できます。 EVALSHAで呼び出すことができる任意のスクリプトを呼び出す 。具体的には、SCRIPT LOADを介して明示的に定義したすべてのLuaスクリプト または暗黙的にEVALを介して f_<sha1 hash>のグローバルLua名前空間で利用可能です (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クラスターシナリオでこれを実行しようとすると、奇妙な方法で動作を停止する可能性があります。