redis~lua腳本的使(shi)用
通(tong)過(guo)lua腳本(ben)來運行redis命令主要體現在批(pi)量(liang)執(zhi)(zhi)行和跨語言(yan)方面,我們可以通(tong)過(guo)redis.call()函數來執(zhi)(zhi)行lua腳本(ben),下面介紹幾個lua里的(de)參數
eval lua-script key-num [key1 key2 key3 ....] [value1 value2 value3 ....]
- eval代表執行Lua語言的命令。
- lua-script代表Lua語言腳本。
- key-num表示參數中有多少個key,需要注意的是Redis中key是從1開始的,如果沒有key的參數,那么寫0。
- [key1 key2 key3…]是key作為參數傳遞給Lua語言,也可以不填,但是需要和key-num的個數對應起來。
- [value1 value2 value3 …]這些參數傳遞給Lua語言,他們是可填可不填的。
實例
在redis里(li)添加一個foo,值(zhi)是lind
eval "return redis.call('set',KEYS[1],ARGV[1])" 1 foo value
下面這個實例是實現分布鎖的lua腳(jiao)本
local lockClientId = redis.call('GET', KEYS[1])\n" +
"if lockClientId == ARGV[1] then\n" +
" redis.call('PEXPIRE', KEYS[1], ARGV[2])\n" +
" return true\n" +
"elseif not lockClientId then\n" +
" redis.call('SET', KEYS[1], ARGV[1], 'PX', ARGV[2])\n" +
" return true\n" +
"end\n" +
"return false"
這個腳本與開發(fa)語言沒有關系。