Lua指令碼操作redis

2021-10-19 22:56:24 字數 1534 閱讀 9977

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...