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

福大大架构师每日一题 2020-10-29 07:09:11
2020-10-29:使用redis实现分布式限流组件,要求高并发场景同一IP一分钟内只能访问100次,超过限制返回异常,写出实现思路或伪代码均可。#福大大架构师每日一题#
...全文
1184 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeepSayingNo 2020-10-29
  • 打赏
  • 举报
回复
用redis的String进行存储,IP为Key,value用自增的方法进行设置值,每次设置完了返回值就是自增后的值,如果为100了就限制范围。给这个设置一个超时时间为1分钟,一分钟后该key会自动消失
戎码一生灬 2020-10-29
  • 打赏
  • 举报
回复
利用Redis的INCR原子自增属性,key值为IP,有效期为1分钟
假设IP-1 来访问,则从缓存拿出来incr的值,小于100则放行,大于100则抛错
亦夜 2020-10-29
  • 打赏
  • 举报
回复

伪:
    $isKey = EXISTS rate.limiting:$ip
    if $isKey is 1
        $times = INCR rate.limiting:$ip
        if $times > 100        // 第100次访问会增加到101
            throw //访问频率超过限制,抛出异常
            exit
    else
       MULTI       //此处,如果不加事务,竞态条件可能出现
    INCR rate.limiting:$ip
    EXPIRE $keyName, 60 
       EXEC

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧