- 論壇徽章:
- 0
|
最近在學(xué)習(xí)redis,發(fā)現(xiàn)其lua功能強(qiáng)大,想用lua script來解決頻繁訪問server,減少網(wǎng)絡(luò)開銷功能
數(shù)據(jù)構(gòu)成如下:
通過key1獲取到key2,key1的類型為set或者list,也就是key2可能有多個(gè)。真正要獲取的數(shù)據(jù)由key2指定。
key1---->key2_1----->value1
key2_2----->value2
key3_3----->value3
......
1. 插入數(shù)據(jù):
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. 創(chuàng)建一個(gè)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. 執(zhí)行如下命令(該測(cè)試redis建立的端口為6378):
redis-cli -p 6378 EVAL "$(cat shell/getkeytokeys.lua)" 1 index_key1
得到如下結(jié)果:
"|data_value3|data_value2|data_value1"
而實(shí)際上我是想得到mget的效果
mget index_key2_1 index_key2_2 index_key2_3
期望結(jié)果:
1) "data_value1"
2) "data_value2"
3) "data_value3"
原因就是redis.call不支持變參傳入,而且只有一個(gè)返回值
請(qǐng)各位專家指點(diǎn)下,該如何達(dá)到上述效果(硬寫獲取到key的個(gè)數(shù)方式不妥,實(shí)際過程中可能得到的list鏈表長度超過20甚至更長,if條件不可能無限寫) |
|