sql >> Database teknologi >  >> NoSQL >> Redis

er det muligt at kalde lua-funktioner defineret i andre lua-scripts i redis?

Jeg vil være i modstrid med det accepterede svar, fordi det accepterede svar er forkert.

Selvom du ikke eksplicit kan definere navngivne funktioner, kan du kan kald ethvert script, som du kan kalde med EVALSHA . Mere specifikt, alle de Lua-scripts, som du eksplicit har defineret via SCRIPT LOAD eller implicit via EVAL er tilgængelige i det globale Lua-navneområde på f_<sha1 hash> (indtil/medmindre du kalder SCRIPT FLUSH ), som du kan ringe til når som helst.

Det problem, du støder på, er, at funktionerne er defineret som ingen argumenter, og KEYS og ARGV tabeller er faktisk globale. Så hvis du vil være i stand til at kommunikere mellem Lua-scripts, skal du enten mangle dine KEYS og ARGV tabeller, eller du skal bruge standard Redis-tasterummet til kommunikation mellem dine funktioner.

meget "hej"2) "verden"127.0.0.1:6379> eval "KEYS[1] ='blah!'; returner f_d006f1a90249474274c76f5be725b8f5804a346b()" 1 "hej" "verden"27) "blah" "verden"27) .0.1:6379>

Alt dette sagt er dette i fuldstændig strid med specifikationerne, og det er fuldstændig muligt at stoppe med at fungere på mærkelige måder, hvis du forsøger at køre dette i et Redis-klyngescenarie.



  1. Tips til opgradering til den seneste MongoDB-version

  2. mongo - kunne ikke oprette forbindelse til server 127.0.0.1:27017

  3. Hvordan bruger man HSCAN kommando i Redis?

  4. Sådan får du flere rækker til en kommasepareret liste i SQL