简单好用的限流器

修改于02/07231 浏览案例分享

限流器的应用

先看一段限流的解释
TapTap
在星火里具体的应用场景我举两个例子:
客户端面对连点器,一段时间内面对连续点击只有第一次才会生效
服务端同步数据,比如我有一个频繁变更的数据想要同步给客户端,但是如果每次变更都同步就会每秒发几百上千次,但是实际上往往1s同步一次就够了,这时候也能用到限流器。

一段不太好的写法

前几天在群里看到有人分享了自己的限流逻辑不管用。(这部分为错误示例)
TapTap
这段限流器确是漏洞有点多,具体漏洞就不分析了,简单来说就是上锁跟解锁不对等,解锁会解掉别人的锁。
而且使用计时器-等待这种操作确实不太优雅。(让我想到了睡眠排序法..)

我自己用起来比较舒服的限流器的一个写法

TapTap
TapTap
全局变量
第一部分逻辑是用于清理无效数据,防止内存泄漏。
第二部分就是将解锁事件和key存在了一个表中做判断,逻辑非常简单,用起来也很好用。
TapTap
返回true即为检查通过

限流器的扩展知识

限流器有多种,这里我们使用的是最简单的 使用后一段时间内禁止其他人使用。
还有漏桶,令牌桶等限流,具体知识可以去百度/谷歌只是留一个扩展,大家有兴趣的可以拓展一下。
4
2
2