zoukankan      html  css  js  c++  java
  • 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个的数据跟当前时间戳比较。
    优点是时间控制相对精确。
    缺点是性能没那么好,实现相对复杂,耗内存多。
    ***
    [评论里有解决方案](https://user.qzone.qq.com/3182319461/blog/1603926200)

    [2020-10-29:使用redis实现分布式限流组件,要求高并发场景同一IP一分钟内只,如何回答呢?](https://www.zhihu.com/question/427835193)

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

  • 相关阅读:
    Exp8 Web综合
    Exp7 网络欺诈防范
    更新Linux下openssl路径和库路径
    CVE-2019-5786漏洞利用复现
    Exp6 MSF应用基础
    CVE-2020-11651漏洞利用复现
    Exp5 信息搜集与漏洞扫描
    Exp4 恶意代码分析
    快速搭建SpringBoot项目
    Java split() 方法注意事项
  • 原文地址:https://www.cnblogs.com/waitmoon/p/13899270.html
Copyright © 2011-2022 走看看