Redis执行Lua脚本

实现一个访问频率控制,某个ip在短时间内频繁访问页面,需要记录并检测出来,就可以通过Lua脚本高效的实现在redis客户端机器上

1.即使用Lua控制IP访问频率:(本实例 针对固定窗口的访问频率,而动态的非滑动窗口)
1.新建一个文件1.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

2.在redis客户端机器上,测试这个脚本

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

–eval参数是告诉redis-cli读取并运行后面的Lua脚本,1.lua是脚本的位置,后面跟着是传给Lua脚本的参数。
其中",“前的rate.limiting:127.0.0.1是要操作的键,可以在脚本中用KEYS[1]获取,”,“后面的10和3是参数,在脚本中能够使用ARGV[1]和ARGV[2]获得。
注:”,"两边的空格不能省略,否则会出错

测试运行如下:

[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

这行命令的作用是将访问频率限制为每10秒最多3次,所以在终端中不断的运行此命令会发现当访问频率在10秒内小于或等于3次时返回1,否则返回0



2.redis执行Lua脚本:

执行命令: redis-cli -a 密码 --eval Lua脚本路径 key [key …] , arg [arg …]

如:redis-cli -a 123456 --eval ./1.lua userName , zhangsan lisi

注:1. key [key …] 和 arg [arg …] 之间的“ , ”,英文逗号前后必须有空格,否则死活都报错

2.通常情况下我们都是把lua script放到一个lua文件中,然后执行这个lua脚本 实战操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hvk_l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值