redis+lua實現腳本一鍵查詢

場景

經常需要查redis某個key的值,需要執行三條命令才能查到

  1. redis-cli,啟動redis
  2. select num,選擇db
  3. get key,查詢語句

需要執行三條命令才能實現某個key的查詢

有沒有一種方式,直接一條命令搞定,並且做成腳本,實現快捷查詢?

通過redis+lua實現的bat腳本替代上面多次操作

實現

說明:C:\Users\Administrator\Desktop,這個是lua腳本的存放目錄

單機環境

lua腳本代碼
redis.call('SELECT','2')
return redis.call('GET','a')
bat腳本代碼
redis-cli --eval C:\Users\Administrator\Desktop\redis1.lua
pause

集群環境

lua腳本代碼
redis.call('SELECT','2')
return redis.call('GET',KEYS[1])
bat腳本代碼
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」

遇到的問題

腳本只啟動redis,沒問題,如果配合lua腳本查詢,會發生閃退?
其實命令已經正常執行了,只不過窗口閃退了
目前解決的辦法是加上pause,讓窗口停留
(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的舊值和新值

lua腳本代碼
if val == ARGV[1]
then
	redis.call('SET', KEYS[1], ARGV[2])
	return 1
else
	return 0
end
bat腳本代碼
redis-cli --eval C:\Users\Administrator\Desktop\redis1.lua  a , 1 2
pause

上面的代碼實現了把a的值從1改為2
注意:[key…]空格,空格[args…],英文逗號要用空格隔開,所有單詞都要用空格隔開,不然執行不成功