通過lua腳本來運行redis命令主要體現在批量執行和跨語言方面,我們可以通過redis.call()函式來執行lua腳本,下面介紹幾個lua里的引數
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里添加一個foo,值是lind
eval "return redis.call('set',KEYS[1],ARGV[1])" 1 foo value
下面這個實體是實作分布鎖的lua腳本
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"
這個腳本與開發語言沒有關系,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1127.html
標籤:NoSQL
