Ich werde der akzeptierten Antwort widersprechen, weil die akzeptierte Antwort falsch ist.
Obwohl Sie benannte Funktionen nicht explizit definieren können, können Sie Rufen Sie jedes Skript auf, das Sie mit EVALSHA
aufrufen können . Genauer gesagt, alle Lua-Skripte, die Sie explizit über SCRIPT LOAD
definiert haben oder implizit über EVAL
sind im globalen Lua-Namespace unter f_<sha1 hash>
verfügbar (bis/es sei denn, Sie rufen SCRIPT FLUSH
auf ), die Sie jederzeit anrufen können.
Das Problem, auf das Sie stoßen, ist, dass die Funktionen so definiert sind, dass sie keine Argumente annehmen, und die KEYS
und ARGV
Tabellen sind eigentlich Globals. Wenn Sie also in der Lage sein wollen, zwischen Lua-Skripten zu kommunizieren, müssen Sie entweder Ihre KEYS
verstümmeln und ARGV
Tabellen, oder Sie müssen den standardmäßigen Redis-Schlüsselraum für die Kommunikation zwischen Ihren Funktionen verwenden.
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>
Alles in allem verstößt dies gegen die Spezifikation und es ist durchaus möglich, dass es auf seltsame Weise nicht mehr funktioniert, wenn Sie versuchen, dies in einem Redis-Cluster-Szenario auszuführen.