NutzCN Logo
问答 API的限流功能,怎么设计实现?
发布于 2840天前 作者 qq_a930202f 1740 次浏览 复制 上一个帖子 下一个帖子
标签:

比如 nutz的
https://nutz.cn/yvr/api/v1/topic/:id/replies,
怎么实现单ip请求每小时最多请求100次?
大致一个怎么实现流程

2 回复

用redis的incr嘛.

// 算出当前小时的字符串表达式
String hourStr = new SimpleDateFormat("yyyyMMdd_HH").format(new Date());
// 获取ip
String ip = Lang.getIp(req);
// 拼出redis的key
String key = "api:limit:" + hourStr + ":" + ip;
long count = jedis().incr(key);
if (key > 100)
     return HTTP_403;
else if (key == 1)
    jedis().expire(key, 3600); // 过期就自动删

有现成的啊。谢~

添加回复
请先登陆
回到顶部