Redis
 sql >> база данни >  >> NoSQL >> Redis

възможно ли е да се извикат lua функции, дефинирани в други lua скриптове в redis?

Ще бъда против приетия отговор, защото приетият отговор е грешен.

Въпреки че не можете изрично да дефинирате наименувани функции, можете извикайте всеки скрипт, който можете да извикате с EVALSHA . По-конкретно, всички Lua скриптове, които сте дефинирали изрично чрез SCRIPT LOAD или имплицитно чрез EVAL са налични в глобалното пространство от имена на Lua в f_<sha1 hash> (до/освен ако не извикате 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 клъстер.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Проблеми при стартиране на екземпляр на OAuthd

  2. Как да зададете изтичане на няколко ключа в Redis

  3. Не може да се получи връзка с джедаите; Не можа да се получи ресурс от пула

  4. StackExchange TimeoutException при опит за вмъкване на 750 елемента в 2 комплекта в redis

  5. Съхранение на върнатата стойност на node.js setTimeout в redis