题目:同一IP一分钟内只能发送100次
概要:1、窗口、2令牌桶 、redis+lua 3漏斗
一、固定/滑动窗口
1、固定窗口:用string存,IP为key,value用自增存次数,>100就限制。设置超时时间1分钟,1分钟后key消失。
性能好,实现简单,耗内存少。
不精准:第一个请求0s到达,剩下99在60s,61s来100个请求,60-61s有199
2、滑动窗口:IP为key,value=list(每次访问的时间戳),每次访问查询list,拿前100个跟当前时间戳比较
时间控制精确,性能不好,实现相对复杂,耗内存多
二、令牌桶
令牌桶:限制平均传输速率外,允许突发流量
漏斗:强行限制传输速率
RateLimit限流 、 redis+lua :https://www.jianshu.com/p/cb3cc0c21f71
三、漏斗
redis4.0提供漏斗算法Redis Cell,redis只提供命令cl.throttle
被拒绝就丢弃或重试。cl.throttle连重试时间都算好,直接取返回结果数组的第四个值进行sleep,如不想阻塞线程,异步定时任务重试
实现
1、定义,根据上次水流动的时间,腾出已流出的空间
2、漏斗限速方法
https://blog.csdn.net/weixin_48502062/article/details/109369706
令牌桶 https://www.cnblogs.com/orangesea/articles/11299557.html
漏斗 https://mp.weixin.qq.com/s/3d_USEzLf-eLSBj_qS9jng
网友评论