API 限流器(二)史上最优秀的访问频率控制器的算法设计详解

本文详细介绍了利用Redis有序集合设计的API访问频率控制器。通过记录IP对应的时间段序号的有序集合,结合Redis的zcount方法统计指定时间范围内的访问次数,以实现限流功能。代码已开源,文章还提及了有序集合的TTL管理以及成员值的设定策略,确保每个访问都能被准确计数。
摘要由CSDN通过智能技术生成

项目代码地址: https://github.com/tangaiyun/RedisRateLimiter

算法的核心思想是用redis中的有序集合来记录访问痕迹,集合的key与时间段序号强相关,集合中加入访问痕迹元素时,score值和member都来自于redis的当前精确到微秒的时间。


举例如果限制的时间单位为分钟,限制前缀为一个IP(128.9.9.23)访问频率,则当前有序集合的key的运算规则如下:

求出当前时间所处的分钟序号: long index = Long.parseLong(jedis.time().get(0)) / 60;

当前有序集合的key为:“128.9.9.23”+“:”+index


对于任意一次访问,设当前时间为T,如上图所示,我们要分别统计A、B 集合中一个统计区间的元素之和,则对于B集合来说,我们需要统计B集合中到目前为止所有的访问记录,其实就是B中的所有元素,简单一点的做法就是 redis.zcount(keyB, L

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值