作者:微信小助手
发布时间:2020-01-15T17:04:55
点击蓝色“架构文摘”关注我哟
加个“星标”,每天上午 09:25,干货推送!
作者:nick hao
来源:cnblogs.com/haoxinyue/p/6792309.html
开涛大神在博客中说过:在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。本文结合作者的一些经验介绍限流的相关概念、算法和常规的实现方式。
计数器
内存中需要保存10次的次数。可以用数据结构LinkedList来实现。格子每次移动的时候判断一次,当前访问次数和LinkedList中最后一个相差是否超过100,如果超过就需要限流了。
示例代码如下:
//服务访问次数,可以放在Redis中,实现分布式系统的访问计数
Long counter = 0L;
//使用LinkedList来记录滑动窗口的10个格子。
LinkedList<Long> ll = new LinkedList<Long>();
public static void main(String[] args)
{
Counter counter = new Counter();
counter.doCheck();
}
private void doCheck()
{
while (true)
{
ll.addLast(counter);
if (ll.size() > 10)
{
ll.removeFirst();
}
//比较最后一个和第一个,两者相差一秒
if ((ll.peekLast() - ll.peekFirst()) > 100)
{
//To limit rate
}
Thread.sleep(100);
}
}