redis腳本


redis腳本使用lua解釋器來執行腳本,redis2.6版本通過內嵌支持lua環境,執行腳本的常用命令為eval

eval命令

語法:eval script numkeys key  [key ...] arg [ arg ...]

實例:

script:參數是一段腳本程序,腳本不必(也不應該)定義為一個Lua函數。

numberkeys:用於指定鍵名參數的個數。

key【key...】 :從eval的第三個參數開始算起,表示在腳本中所用的到那些redis鍵(key),這些鍵名參數可以在Lua中通過全局變量keys數組,用1位基址的形式訪問(keys[1],keys[2])

arg [arg ...]: 附加參數,在 Lua 中通過全局變量 ARGV 數組訪問,訪問的形式和 KEYS 變量類似( ARGV[1] 、 ARGV[2] ,諸如此類)。

1 127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],KEYS[3],ARGV[1],ARGV[2],ARGV[3]}" 3 shi zhang yang 23 21 20
2 1) "shi"
3 2) "zhang"
4 3) "yang"
5 4) "23"
6 5) "21"
7 6) "20"
View Code

 

evalsha命令

evalsha命令根據給定的sha1校驗碼,執行緩存在服務器中的腳本。

將腳本緩存到服務器的操作可以通過SCRIPT LOAD命令進行。

這個命令的其他地方,不如參數的傳入方式,都喝EVAL命令一樣。

evalsha命令基本語法: evalsha  sha1  numkeys  key [key...]  arg[arg ...]

sha1:通過SCRIPT LOAD 生成的sha1校驗碼。

key [key ...]: 從 EVAL 的第三個參數開始算起,表示在腳本中所用到的那些 Redis 鍵(key),這些鍵名參數可以在 Lua 中通過全局變量 KEYS 數組,用 1 為基址的形式訪問( KEYS[1] , KEYS[2] ,以此類推)。

arg [arg ...]: 附加參數,在 Lua 中通過全局變量 ARGV 數組訪問,訪問的形式和 KEYS 變量類似( ARGV[1] 、 ARGV[2] ,諸如此類)。

實例:

1 127.0.0.1:6379> script load "return 'hello moto'"
2 "232fd51614574cf0867b83d384a5e898cfd24e5a"
3 127.0.0.1:6379> evalsha "232fd51614574cf0867b83d384a5e898cfd24e5a" 0 
4 "hello moto"
View Code

 

Script Exists 命令

Script Exists命令用於校驗指定的腳本是否已經被保存在緩存當中。

基本語法: evalsha  sha1  numkeys  key[key...]  arg [arg...]

返回值:一個列表,包含0和1,前者表示腳本不存在於緩存,后者表示腳本已經在緩存里面了。

列表中的元素和給定的SHA1校驗和保持對應關系,比如列表的第三個元素的值就表示第三個SHA1校驗和指定腳本在緩存中的狀態。

實例:

1 127.0.0.1:6379> script load "return 'hello moto'"  #SHA1校驗碼
2 "232fd51614574cf0867b83d384a5e898cfd24e5a"
3 127.0.0.1:6379> script exists  232fd51614574cf0867b83d384a5e898cfd24e5a  #查看校驗碼是否存在
4 1) (integer) 1   #1表示存在
5 127.0.0.1:6379> script flush#清空緩存
6 OK
7 127.0.0.1:6379> script exists  
8 232fd51614574cf0867b83d384a5e898cfd24e5a#再次查看緩存,0表示不存在
9 1) (integer) 0
View Code

 

Script Flush 命令

該命令用於清楚所有LUA腳本緩存。

基本語法: Script Flush

返回值:總是返回OK

實例:

1 127.0.0.1:6379> script load "return 'hello moto'"
2 "232fd51614574cf0867b83d384a5e898cfd24e5a"
3 127.0.0.1:6379> script exists 232fd51614574cf0867b83d384a5e898cfd24e5a
4 1) (integer) 1
5 127.0.0.1:6379> script flush###清楚腳本緩存
6 OK
7 127.0.0.1:6379> script exists 232fd51614574cf0867b83d384a5e898cfd24e5a
8 1) (integer) 0
View Code

 

Script kill命令

Script kill命令用於殺死當前正在運行的Lua腳本,當且僅當這個腳本沒有執行過任何操作時,這個命令才生效。

這個命令主要用於終止運行時間過長的腳本,比如一個bug而發生無限循環的腳本。

script kill執行之后,當前正在運行的腳本會被殺死,執行這個腳本的客戶端會從eval命令的阻塞當中退出,並收到一個錯誤作為返回值。

基本命令:script  kill

返回值:script kill

實例:

 1 redis 127.0.0.1:6379> SCRIPT KILL 2 OK 

 

Script load  script命令

該命令用於將腳本script添加到腳本緩存中,但並不執行這個腳本。

eval命令也會將腳本添加到腳本緩存中,但是它會里脊對輸入的腳本進行求值。

如果給定的腳本已經在緩存里面了,那么不執行任何操作。

在腳本被加入到緩存之后,通過evalsha命令,可以使用腳本的sha1校驗和來調用這個腳本。

腳本可以在緩存中保留無限長的時間,知道執行script flush為止。

基本語法:script  load  script

返回值:給定腳本的SHA1校驗和。

實例:

1 127.0.0.1:6379> script load "return 1"
2 "e0e1f9fabfc9d4800c877a703b823ac0578ff8db"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM