Search code examples
javaredisluaparameter-passinglettuce

How can I pass a variable to a Lua script from Java? (io.lettuce.core)?


I have a Lua script like this that does an hgetall command on a remote Redis cluster:

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

I want to pass a variable to the hgetall call. This is what my eval statement, calling the above script, looks like:

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

Where key is a unique identifier (primary key) of acc. Right now this function returns an empty list.

How do I pass a Java variable into the above Lua script with io.lettuce.core? (There aren't any connection issues, and I can use a similar query with a hard coded key value and it works.)


Solution

  • You can find some example in this unit test. It seems you should call it in this way:

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

    And you should refer to the argument as ARGV[1].