Redis在2.6推出了腳本功能,容許開發者使用Lua語言編寫腳本傳到Redis中執行。使用腳本的好處以下:redis
在redis客戶端機器上,新建一個文件ratelimiting.lua,內容以下服務器
local times = redis.call('incr',KEYS[1]) if times == 1 then redis.call('expire',KEYS[1], ARGV[1]) end if times > tonumber(ARGV[2]) then return 0 end return 1
在redis客戶端機器上,如何測試這個腳本呢?以下:網絡
redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3
--eval參數是告訴redis-cli讀取並運行後面的Lua腳本,ratelimiting.lua是腳本的位置,後面跟着是傳給Lua腳本的參數。其中","前的rate.limiting:127.0.0.1是要操做的鍵,能夠再腳本中用KEYS[1]獲取,","後面的10和3是參數,在腳本中可以使用ARGV[1]和ARGV[2]得到。注:","兩邊的空格不能省略,不然會出錯測試
結合腳本的內容可知這行命令的做用是將訪問頻率限制爲每10秒最多3次,因此在終端中不斷的運行此命令會發現當訪問頻率在10秒內小於或等於3次時返回1,不然返回0。lua
測試運行以下:spa
[root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3 (integer) 1 [root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3 (integer) 1 [root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3 (integer) 1 [root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3 (integer) 0 [root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3 (integer) 0
補充:code
如今Lua腳本用在不少遊戲上,主要是Lua腳本作到能夠嵌入到其餘程序中運行,遊戲升級的時候,能夠直接升級腳本,而不用從新安裝遊戲。好比遊戲的不少關卡,只須要增長lua腳本,在遊戲中嵌入Lua解釋器,遊戲團隊線上更新Lua腳本,而後遊戲自動下載最新的遊戲關卡。例如以前不少的遊戲《憤怒的小鳥》就是用Lua語言實現的關卡。blog
摘自《Redis入門指南》遊戲