在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。使用脚本的好处如下:
实现一个访问频率控制,某个ip在短时间内频繁访问页面,需要记录并检测出来,就可以通过Lua脚本高效的实现:在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
结合脚本的内容可知这行命令的作用是将访问频率限制为每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 补充: 现在Lua脚本用在很多游戏上,主要是Lua脚本做到可以嵌入到其他程序中运行,游戏升级的时候,可以直接升级脚本,而不用重新安装游戏。比如游戏的很多关卡,只需要增加lua脚本,在游戏中嵌入Lua解释器,游戏团队线上更新Lua脚本,然后游戏自动下载最新的游戏关卡。例如之前很多的游戏《愤怒的小鸟》就是用Lua语言实现的关卡。
|
请发表评论