- 论坛徽章:
- 0
|
最近在学习redis,发现其lua功能强大,想用lua script来解决频繁访问server,减少网络开销功能
数据构成如下:
通过key1获取到key2,key1的类型为set或者list,也就是key2可能有多个。真正要获取的数据由key2指定。
key1---->key2_1----->value1
key2_2----->value2
key3_3----->value3
......
1. 插入数据:
lpush index_key1 index_key2_1
lpush index_key1 index_key2_2
lpush index_key1 index_key2_3
set index_key2_1 data_value1
set index_key2_2 data_value2
set index_key2_3 data_value3
2. 创建一个lua脚本 例如 getkeytokeys.lua
local list,z,x,y=redis.call('LRANGE', KEYS[1], 0, -1),''
for x,y in ipairs(list) do
z=z..'|'..redis.call('GET', y)
end
return (z)
3. 执行如下命令(该测试redis建立的端口为6378):
redis-cli -p 6378 EVAL "$(cat shell/getkeytokeys.lua)" 1 index_key1
得到如下结果:
"|data_value3|data_value2|data_value1"
而实际上我是想得到mget的效果
mget index_key2_1 index_key2_2 index_key2_3
期望结果:
1) "data_value1"
2) "data_value2"
3) "data_value3"
原因就是redis.call不支持变参传入,而且只有一个返回值
请各位专家指点下,该如何达到上述效果(硬写获取到key的个数方式不妥,实际过程中可能得到的list链表长度超过20甚至更长,if条件不可能无限写) |
|