Скрипт Lua на Redis Cluster - PullRequest
       14

Скрипт Lua на Redis Cluster

0 голосов
/ 17 января 2019

У меня есть кластер Redis, и я хотел бы выполнить сценарий LUA на целевом узле. Когда я это делаю, я получаю сообщение об ошибке от Redis Cluster, в котором говорится, что ключи должны быть на одном слоте, но скрипт выполняет две команды только на 1 ключе.

if redis.call('HEXISTS', 'TEST', KEYS[1]) == 1
    then 
        redis.call('HSET', 'TEST', KEYS[1], ARGV[1])
        return 1
    end
return 0

Я пытался использовать Hash Tag Key, но он не работает.

1 Ответ

0 голосов
/ 17 января 2019

Вы получаете эту ошибку, потому что пытаетесь получить доступ к ключу Redis с именем TEST, но не сообщайте об этом Redis или вашему клиенту Redis, указав его в команде EVAL.

Скрипты Redis Lua принимают два списка аргументов, один - общего назначения (ARGV[]), а другой - строгий список ключей, к которым скрипт будет обращаться (KEYS[]).

Возможно, вы поменяли имя ключа и имя поля в вызове HEXISTS, т. Е. Вам может понадобиться использовать:

if redis.call('HEXISTS', KEYS[1], 'TEST') == 1
    then 
        redis.call('HSET', KEYS[1], 'TEST', ARGV[1])
        return 1
    end
return 0

Это должно работать до тех пор, пока имя ключа правильно передается команде EVAL.

...