redis限流

1、基于Redis的数据结构zset

用的redis的zset来计数,score字段寸时间戳,每次请求增加一条数据,并按score移除超时的数据。

最后在给整个key1加个过期时间

2、基于Redis的令牌桶算法

具体代码实现:

https://blog.csdn.net/weixin_42645678/article/details/124428393

  1. 根据tokenKey查询最后一次剩余令牌数last_tokens,如果查不到,说明当前令牌是满的last_tokens=capcity;
  2. 再去根据timestamp_key查询上次消费令牌的时间戳last_refreshed,不存在就给0;
  3. 根据上次消费令牌的时间戳和当前时间戳算出时间间隔,再根据令牌生成速率,计算剩余令牌数量 filled_tokens = math.min(capacity, last_tokens+(delta*rate));
  4. 对比剩余令牌数量和请求的令牌数量,如果满足就通过,否则就不通过;
  5. 最后更新tokenKey、timestamp_key

 

 

 

 

 

 

 

posted @   guoyu1  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-12-02 15. 数组中的第K个最大元素
2021-12-02 43. 字符串相乘
2019-12-02 ZAB协议-Zookeeper一致性协议
2019-12-02 Zookeeper数据类型、节点类型、角色、watcher监听机制
点击右上角即可分享
微信分享提示