Home
Sign Up
Sign In
V2EX
›
问与答
API 调用频次限制怎么实现?
1
snnn
·
Jul 25, 2014
· 7511 views
This topic created in 4489 days ago, the information mentioned may be changed or developed.
比如,我做了一个注册用户的接口。
我想限制:
1.每个IP每3秒只能注册一个账号
2.每个IP每分钟只能注册10个账号
2.每个IP每小时只能注册300个账号
该如何实现?
谢谢!
账号
注册
调用
7 replies
•
2014-07-25 13:21:11 +08:00
eslizn
Jul 25, 2014
1
带创建时间戳计数器呗
tabris17
Jul 25, 2014
2
服务器内存中维护一套IP调用时间戳的映射表呗
snnn
OP
Jul 25, 2014
3
@
tabris17
怎么做到线程安全和过期自动清除老数据呢?
数据是按秒存,还是按照秒、分钟、小时各存一份?
jevonszmx
Jul 25, 2014
4
@
snnn
可以使用redis,本身redis是单线程操作,所以线程安全可以保证
yibin001
Jul 25, 2014
5
三个key
key:ip:sec 3秒自动过期,每次注册时检查key存不存在,不存在就写入,然后走注册流程。
key:ip:min 1分钟自动过期,每次注册前判断值,注册成功以后+1
key:ip:hour 1小时自动过期,判断同上
sonicwu
Jul 25, 2014
2
6
不用数据结构和定时器的流量限制算法 -- "Token Bucket"
http://stackoverflow.com/a/668327
r4ntix
Jul 25, 2014 via Android
7
@
sonicwu
Token Bucket 也是需要记录时间戳的,而且要对时间切片来应对brust 情况。
About
·
Help
·
Advertise
·
Blog
·
API
·
FAQ
·
Privacy
·
Solana
·
903 Online
Highest 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms ·
UTC 16:54
·
PVG 00:54
·
LAX 08:54
·
JFK 11:54
♥ Do have faith in what you're doing.
❯