場景
經常需要查redis某個key的值,需要執行三條命令才能查到
- redis-cli,啟動redis
- select num,選擇db
- get key,查詢語句
需要執行三條命令才能實現某個key的查詢
通過redis+lua實現的bat指令碼替代上面多次操作
說明:C:\Users\Administrator\Desktop,這個是lua指令碼的存放目錄
redis.call('SELECT','2')
return redis.call('GET','a')
redis-cli --eval C:\Users\Administrator\Desktop\redis1.lua
pause
redis.call('SELECT','2')
return redis.call('GET',KEYS[1])
redis-cli -h xxx.redis.rds.aliyuncs.com -p 6379 -a user:password --eval C:\Users\Administrator\Desktop\redis.lua key
pause
Redis叢集對lua指令碼限制:呼叫必須要帶有key,否則直接返回錯誤資訊, “-ERR for redis cluster, eval/evalsha number of keys can’t be negative or zerorn”
(error) ERR ‘EVAL’ command keys must in same slot
原因:lua指令碼為保證事務,傳入的key必須是在同一個slot中
解決:在KEY上加{},這樣在hash key 的時候只會計算{}內的內容,使得Key落在同一個slot內
比如,我們原來的key是ali1,ali2,現在我們寫成{ali}1,{ali}2,就不會報錯
設定指定key的value,傳入key的舊值和新值
if val == ARGV[1]
then
redis.call('SET', KEYS[1], ARGV[2])
return 1
else
return 0
end
redis-cli --eval C:\Users\Administrator\Desktop\redis1.lua a , 1 2
pause
上面的程式碼實現了把a的值從1改為2
注意:[key…]空格,空格[args…],英文逗號要用空格隔開,所有單詞都要用空格隔開,不然執行不成功