Как передать переменную в скрипт lua из java? (io.lettuce.core)

У меня есть такой lua-скрипт, который выполняет команду hgetall на удаленном кластере Redis:

String shaFindAccount = syncCommands.scriptLoad("local hgetAllKeys = function(key) \n" +
                                                "local acc = redis.call('HGETALL', key)\n" +
                                                "return acc\n" +
                                                "end\n");

Я хочу передать переменную вызову hgetall. Вот как выглядит мой оператор eval, вызывающий приведенный выше скрипт:

list = syncCommands.evalsha(shaFindAccount, ScriptOutputType.MULTI, key);

Где key — уникальный идентификатор (первичный ключ) соотв. Сейчас эта функция возвращает пустой список.

Как передать переменную Java в приведенный выше сценарий lua с помощью io.lettuce.core? (Проблем с подключением нет, я могу использовать аналогичный запрос с жестко заданным значением key, и он работает)

Вы можете найти пример в модульном тесте это. Кажется, вы должны называть это так: .evalsha(digest, MULTI, new String[0], key)); и вы должны ссылаться на аргумент как ARGV[1].

m4gic 06.03.2019 17:15

@ m4gic, вы должны преобразовать свой комментарий в ответ, чтобы ОП мог его принять.

Andrew Eisenberg 16.03.2019 06:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
1 482
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете найти пример в модульном тесте это. Кажется, вы должны называть это так:

list = syncCommands.evalsha(digest, MULTI, new String[0], key));

и вы должны ссылаться на аргумент как ARGV[1].

Для тех, кто читает, добавление возврата в конец скрипта lua, например return hgetallkeys(KEYS[1]), позволило мне передать переменную, как было предложено m4gic.

dk40149 19.03.2019 19:12

Другие вопросы по теме