V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acnes
V2EX  ›  程序员

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

  •  
  •   acnes · 2019-06-05 21:47:13 +08:00 · 2420 次点击
    这是一个创建于 1780 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    这样好像不会被 feng

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

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

    RateLimiter 用来限流是可以的,但是和我要做的需求目的不一样,这里的目的是限制用户刷评论等操作,或者模拟请求恶意攻击,这样会产生很多垃圾数据,所以需要去控制用户的操作频率,尽可能保证都是正常的人为操作
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2806 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:01 · PVG 22:01 · LAX 07:01 · JFK 10:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.