Ik ga tegen het geaccepteerde antwoord in, omdat het geaccepteerde antwoord fout is.
Hoewel u benoemde functies niet expliciet kunt definiëren, kunt u wel roep een willekeurig script aan dat je kunt aanroepen met EVALSHA
. Meer specifiek, alle Lua-scripts die u expliciet hebt gedefinieerd via SCRIPT LOAD
of impliciet via EVAL
zijn beschikbaar in de globale Lua-naamruimte op f_<sha1 hash>
(tot/tenzij je SCRIPT FLUSH
belt ), die u op elk moment kunt bellen.
Het probleem dat je tegenkomt is dat de functies zijn gedefinieerd als het nemen van geen argumenten, en de KEYS
en ARGV
tabellen zijn eigenlijk globals. Dus als je wilt kunnen communiceren tussen Lua-scripts, moet je ofwel je KEYS
mangelen en ARGV
tabellen, of u moet de standaard Redis-toetsruimte gebruiken voor communicatie tussen uw functies.
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>
Dit alles gezegd hebbende, dit is volledig in strijd met de specificaties en het is heel goed mogelijk om op vreemde manieren te stoppen met werken als je probeert dit in een Redis-clusterscenario uit te voeren.