微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用redis对 ip实现限流

需求: 同一个IP在 一定的时间内只能访问制定的次数,否则就不处理请求

具体思路: 这里借助的是redis的string数据类型,用 key保存IP地址,
value为访问的次数,而访问的时间和规定的次数则是通过参数进行传递的。

当有一个请求来访问的时候则记录它的IP,则对其值加1,并设置过期时间
倘若超出访问次数限制就返回0,否则返回1。过期之后即可重新访问

具体的实现是通过lua脚本来实现的,代码如下:

local num =redis.call('incr',KEYS[1])
if tonumber(num)==1 then
	redis.call('expire',KEYS[1],ARGV[1])
	return 1
elseif tonumber(num)>tonumber(ARGV[2]) then
	return 0
	else
	return 1
end

其中 KEYS[1]是保存 IP地址的 key值,ARGV[1]是过期时间,ARGV[2]是限定访问的次数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐