sql >> Databáze >  >> NoSQL >> Redis

je možné volat funkce lua definované v jiných skriptech lua v redis?

Budu v rozporu s přijatou odpovědí, protože přijatá odpověď je špatná.

I když nemůžete explicitně definovat pojmenované funkce, můžete zavolejte libovolný skript, který můžete volat pomocí EVALSHA . Přesněji řečeno, všechny skripty Lua, které jste explicitně definovali pomocí SCRIPT LOAD nebo implicitně prostřednictvím EVAL jsou dostupné v globálním jmenném prostoru Lua na f_<sha1 hash> (dokud/pokud nezavoláte SCRIPT FLUSH ), na které můžete kdykoli zavolat.

Problém, na který narazíte, je, že funkce jsou definovány tak, že neberou žádné argumenty a KEYS a ARGV tabulky jsou ve skutečnosti globální. Takže pokud chcete být schopni komunikovat mezi Lua skripty, musíte buď zkombinovat vaše KEYS a ARGV tabulky, nebo musíte pro komunikaci mezi vašimi funkcemi použít standardní klíčový prostor Redis.

127.0.0.1:6379> Zátěž skriptu "Návrat {Keys [1], Argv [1]}" "D006F1A90249474274C76F5BE725B8F5804A346B" 127.0.0.1.15.15742746. "hello"2) "world"127.0.0.1:6379> eval "KEYS[1] ='bla!'; return f_d006f1a90249474274c76f5be725b8f5804a346b()" 1 "ahoj" 0blahworld!"2) "2) "ahoj" blahworld!"2) .0.1:6379>

To vše řeklo, že je to v naprostém rozporu se specifikací a je zcela možné přestat fungovat podivným způsobem, pokud se to pokusíte spustit ve scénáři clusteru Redis.



  1. jak předat proměnnou regulárnímu výrazu

  2. Jarní data Provoz Redis HGETALL

  3. Jak aktualizovat hodnoty pomocí pymongo?

  4. Jarní data a mongodb – jednoduchý návrat pomocí pružiny v @Transactional