2020-10-29:使用redis实现分布式限流组件...

2020-10-30 10:03:46 浏览数 (1)

2020-10-29:使用redis实现分布式限流组件,要求高并发场景同一IP一分钟内只能访问100次,超过限制返回异常,写出实现思路或伪代码均可。

福哥答案2020-10-29:

简单回答:

固定窗口:string。key存ip,value存次数。

滑动窗口:list。key存ip,value=list,存每次访问的时间。

中级回答:

固定窗口:用redis的string进行存储,IP为key,value用自增的方法进行设置值,每次设置完了返回值就是自增后的值,如果为100了就限制范围。给这个设置一个超时时间为1分钟,一分钟后该key会自动消失。

优点是性能好,实现简单,耗内存少。

缺点是第一个请求在0s到达,剩下99在60s,然后61s来了100个请求,也就是60-61s有199个请求来了,并不是严格的任一请求任一分钟都是100次的限制。。

滑动窗口:key 存ip ,value=list,list存的是每次访问的时间戳,每次访问查询list数据,拿前第100个的数据跟当前时间戳比较。

优点是时间控制相对精确。

缺点是性能没那么好,实现相对复杂,耗内存多。


评论里有解决方案

2020-10-29:使用redis实现分布式限流组件,要求高并发场景同一IP一分钟内只,如何回答呢?

2020-10-29:使用redis实现分布式限流组件,要求高并发场景同一IP一分钟内只能访问100次,超过限制返回异常,写出实现思路或伪代码均可。

0 人点赞