目录
接口限流的主要目的在于提高系统的稳定性,使用Redis记录某时间段用户IP访问接口的次数,以key,value方式记录数据,key为IP加接口方法名,value的值为访问的次数。每次访问时判断value的值是否大于设定的次数,如果超过设定的访问次数,则返回相应提示信息。避免键过期的瞬间,出现限流不起作用的问题,采用滑动窗口的方式,即记录当前用户访问的时间点(时间戳),计算前10秒内用户访问该接口的总次数。如果总次数大于限流次数,则不允许用户访问该接口。
Redis数据结构选择
zSet有序集合
ZADD [key] [score] [member]
score,用户访问接口的时间戳。key,记录用户IP和接口方法名。member,记录用户访问接口的时间点。时间间隔之前的member删掉,留下的member就是时间间隔之内的总访问次数。然后统计当前key中的member有多少个即可。zSet命令,删除score范围在[min~max]
之间的member: