滑动窗口限速模型,可以演变各种限速版本
- 周期T可以自定义大小
- 写入的值可以是每次最新,或者增量
- 滚动写入的窗口大小可以自定义
以上几种情况共同确认滑动窗口的限速的方式
单机版的限速
Redis版本的限速---触发式滑动窗口
- redis用List存一个限速key
- 每次请求redis检测是否限速,传参:key,系统当前时间
- redis中通过lua脚本实现:通过时间取余,将当前请求累加到到不同元素中
- list大小决定窗口大小
- 窗口通过请求的时间往前移动,当list超过窗口大小则移除最久的哪一个元素
- 统计所有元素累加的count就是滑动窗口的速度
- 以上所有步骤通过lua脚本保证原子性
时间单位,list元素的个数共同决定滑动窗口的大小和精度;
主要是利用了redis的分布式共享内存来实现限速,单机版的久更好实现了