eval script numkeys key [key …] arg [arg …]
script 對應lua指令碼
numkeys 指定鍵名引數個數
key 為鍵名引數
arg 為附加引數
lua通過全域性變數keys和ar**獲取鍵名引數和附加引數,如下:
local k1 = keys[1]
local feild = ar**[1]
local val = ar**[2]
redis.call('hset', k1, feild, val)
json格式的引數可以通過cjson.decode()進行解碼轉化成lua的table結構
1. 執行lua指令碼
2. 執行lua指令碼檔案
./redis-cli -a password --eval [path-lua-script] k , foo bar
鍵名引數和附件引數用「,」隔開,「,」兩邊各留乙個空格
定義lua指令碼test.lua
local k1 = keys[1]
local feild = ar**[1]
local val = ar**[2]
return redis.call('hset', k1, feild, val)
執行lua指令碼檔案
./redis-cli -a 123 --eval /path/test.lua k , foo bar
注:lua指令碼執行**現錯誤,已成功執行的命令不會回滾
local k1 = keys[1]
local k2 = keys[2]
local feild = ar**[1]
local val = ar**[2]
redis.call('hset', k1, feild, val) 正確執行
redis.call('get', k1) 執行出錯,鍵值為hash結構
redis.call('hset', k2, feild, val) 不會執行,前面已報錯
return redis.call('hget', k2, feild) 不會執行,前面已報錯
lua指令碼操作redis資料庫
參考 eval 為什麼要用lua指令碼操作redis資料庫?1.減少開銷 減少向redis伺服器的請求次數 2.原子操作 redis將lua指令碼作為乙個原子執行 3.可復用 其他客戶端可以使用已經執行過的lua指令碼 4.增加redis靈活性 lua指令碼可以幫助redis做更多的事情 lua指令...
使用lua指令碼操作redis之demo
使用lua指令碼操作redis資料的乙個demo,只是為了入門,以後還會深入.set.lua,redis的set命令使用 redis set key val local key keys 1 local val argv 1 return redis.call set key,val set.lua...
redis呼叫lua指令碼
在redis中很多基本操作都是原子操作 但是缺少事務的概念,所幸的是redis支援lua指令碼,可以利用lua指令碼實現事務特性 執行比 較對應key值大小,更新較大值 的lua指令碼 param key param time return public object updatehigherint...