redis 实战之限制操作频率,分享这个会被大佬 feng 吗?

2019-06-05 21:47:13 +08:00
 acnes

这里是内容,我先试试水,一分享就 403, 很久前分享了其他内容,已经被 feng 了 3 个账号,没毛病,一点理由都不给,被安排的不明不白的,很霸气~

Github 地址:实战之限制操作频率

这样好像不会被 feng

为啥我把内容 makdown 帖进来就被封了呢???

2570 次点击
所在节点    程序员
9 条回复
IamNotShady
2019-06-05 22:52:58 +08:00
能结局时间边界问题吗?
IamNotShady
2019-06-05 22:53:30 +08:00
@IamNotShady 解决
acnes
2019-06-05 23:06:27 +08:00
@IamNotShady 自问自答了呀
acnes
2019-06-05 23:07:57 +08:00
使用 markdown 分享文章是违规的吗?谁能告知下,好像没看到这个限制规则
rbe
2019-06-06 00:01:15 +08:00
个人觉得抽象的不是那么好。
1. RateLimiter 很可能条件是多个,比如 1 分钟只能发一条短信,同时 1 天最多只能发 5 条,这种情况下要调你的这个函数两次;
2. 点赞太多触发处罚,个人认为触发逻辑应该归触发逻辑,不应当杂糅到频率限制里去,当然这是个人做法;
3. 上一条说的个人觉得好的做法是给出 remaining 时间,即过了多久可以再操作
由于我是 Node 开发者,不是 PHP 开发,没法举 PHP 的例子,所以只好举个 NodeJS 的例子,TJ 大佬写的 RateLimiter 楼主不妨看看呢?我自己在业务里写的也是用 incryby + expireat 夹在 redis 事务里的形式,但是这里他用的时间戳排序的 zset 也是挺好的。
rbe
2019-06-06 00:02:24 +08:00
Distand
2019-06-06 16:19:16 +08:00
频率限制是在第一次操作时设置过期时间,无法适用如“近 N 秒内限制次数”的场景
acnes
2019-06-07 09:35:52 +08:00
@Distand 可以设置 N 秒内的限制哦,比如:你设置 10 秒时间累积操作次数,没有超过你设置的数量,10 秒后就过期了,那样下一次就重新累积
acnes
2019-06-07 09:40:42 +08:00
@rbe 嗯,能解决大部分场景,但是还是有些场景无法兼容,这个需要进一步去抽象

RateLimiter 用来限流是可以的,但是和我要做的需求目的不一样,这里的目的是限制用户刷评论等操作,或者模拟请求恶意攻击,这样会产生很多垃圾数据,所以需要去控制用户的操作频率,尽可能保证都是正常的人为操作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/571284

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX