首页
注册
登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请
登录
广告
V2EX
›
问与答
API 调用频次限制怎么实现?
1
snnn
·
2014-07-25 11:32:42 +08:00
· 6480 次点击
这是一个创建于 3897 天前的主题,其中的信息可能已经有所发展或是发生改变。
比如,我做了一个注册用户的接口。
我想限制:
1.每个IP每3秒只能注册一个账号
2.每个IP每分钟只能注册10个账号
2.每个IP每小时只能注册300个账号
该如何实现?
谢谢!
账号
注册
调用
7 条回复
•
2014-07-25 13:21:11 +08:00
1
eslizn
2014-07-25 11:33:48 +08:00
带创建时间戳计数器呗
2
tabris17
2014-07-25 11:38:57 +08:00
服务器内存中维护一套IP调用时间戳的映射表呗
3
snnn
OP
2014-07-25 11:43:52 +08:00
@
tabris17
怎么做到线程安全和过期自动清除老数据呢?
数据是按秒存,还是按照秒、分钟、小时各存一份?
4
jevonszmx
2014-07-25 11:45:39 +08:00
@
snnn
可以使用redis,本身redis是单线程操作,所以线程安全可以保证
5
yibin001
2014-07-25 11:46:37 +08:00
三个key
key:ip:sec 3秒自动过期,每次注册时检查key存不存在,不存在就写入,然后走注册流程。
key:ip:min 1分钟自动过期,每次注册前判断值,注册成功以后+1
key:ip:hour 1小时自动过期,判断同上
6
sonicwu
2014-07-25 12:08:19 +08:00
2
不用数据结构和定时器的流量限制算法 -- "Token Bucket"
http://stackoverflow.com/a/668327
7
r4ntix
2014-07-25 13:21:11 +08:00 via Android
@
sonicwu
Token Bucket 也是需要记录时间戳的,而且要对时间切片来应对brust 情况。
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
3395 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms ·
UTC 04:47
·
PVG 12:47
·
LAX 21:47
·
JFK 00:47
Developed with
CodeLauncher
♥ Do have faith in what you're doing.