如何在redis的lua中返回不同类型的多个返回值?


 lua脚本的函数支持多返回值,若redis调用lua脚本支持多返回值,会使一些开发场景简单。但遗憾的是经过试验,redis不支持这一特性。


测试脚本如下:


test.lua -> 

 

  local function test(val) 
 
     return 1, val 
 
 end 
 
 return test(KEYS[1])


使用redis执行脚本:


redis-cli --eval test.lua 1 3


结果:


(integer) 1



由上可见,redis只返回第一个值。


一种做法是,利用lua的table,将不同类型的值放入table,最后返回table。


测试脚本如下:


test.lua ->


local function test(val) 
 
     local ret1 = {1, 2} 
 
     local ret2 = "hello" 
 
     local ret3 = val 
 
     local ret = {} 
 
     ret[1] = ret1 
 
     ret[2] = ret2 
 
     ret[3] = ret3 
 
     return ret 
 
 end 
 
 return test(KEYS[1])


执行脚本:


redis-cli --eval test.lua 1 3


结果:


1) 1) (integer) 1
   2) (integer) 2
2) "hello"
3) "1"



可见,结果已经返回。


需要注意的是,使用jedis取结果时,需要将结果以List<Object>接收,之后对每个item转换为相应的类型再处理。