时间窗口的实现思路

参考以下博客:
关于两种限流模式

其中,我理解的时间窗口的实现方式:
1. 建立一个定长数组,数组每个位置代表一个相对时间窗口,内容存储这个窗口内的限流计数器(AtomicInteger)
2. 保存一个初始索引指针,用来记录指针变更
3. 当请求过来时,先将当前时间取模定位到数组中的某个位置(代表某个相对时间),然后判断此位置是否等于索引指针,如果等于说明还在当前窗口内,则将它的值+1;如果不等于则说明不在当前窗口内了,则需要先将此位置的值覆盖为1,再将指针移动。

这里需要注意移动指针的并发操作问题。

猜你喜欢

转载自blueswind8306.iteye.com/blog/1747389