Redis指令碼外掛程式之 執行Lua指令碼示例

2021-09-07 07:07:27 字數 2161 閱讀 8600

redis在2.6推出了指令碼功能,允許開發者使用lua語言編寫指令碼傳到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

0end

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。

測試執行如下:

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3

can'

t open file

'ratelimiting.lua'

: no such file or directory

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval redis-test01.lua rate.limitingl:127.0.0.1 , 10 3

(integer) 1

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval redis-test01.lua rate.limitingl:127.0.0.1 , 10 3

(integer) 1

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval redis-test01.lua rate.limitingl:127.0.0.1 , 10 3

(integer) 1

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval redis-test01.lua rate.limitingl:127.0.0.1 , 10 3

(integer) 1

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval redis-test01.lua rate.limitingl:127.0.0.1 , 10 3

(integer) 0

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval redis-test01.lua rate.limitingl:127.0.0.1 , 10 3

(integer) 0

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval redis-test01.lua rate.limitingl:127.0.0.1 , 10 3

(integer) 0

root@iz23a7607jaz:/home/tinywan/lua# redis-cli --

eval redis-test01.lua rate.limitingl:127.0.0.1 , 10 3

補充:

c 中用lua指令碼執行redis命令

直接貼出 實現執行lua指令碼的方法,用到的第三方類庫是 stackexchange.redis nuget上有 注 下面的 是簡化後的,實際使用要修改,using system using system.collections.generic using system.linq using sys...

redis指令碼使用Lua直譯器執行

redis在2.6之前,指令碼使用lua直譯器來執行指令碼,2.6之後內嵌了lua環境,執行指令碼命令使用eval.evla命令語法 eval script numkeys key key arg arg eval return 2 key1 key2 first second 1 key1 2 k...

c 中用lua指令碼執行redis命令

直接貼出 實現執行lua指令碼的方法,用到的第三方類庫是 stackexchange.redis nuget上有 注 下面的 是簡化後的,實際使用要修改,csharp view plain copy using system using system.collections.generic usin...