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入门指南》游戏