当前位置: 首页 > wzjs >正文

北京手机网站设计电话青山湖南昌网站建设

北京手机网站设计电话,青山湖南昌网站建设,网站招聘方案怎么做,wordpress 响应式布局滑动窗口算法 概述原理窗口定义窗口滑动请求统计 实现代码定义示例IP限流控制 概述 滑动窗口算法(Sliding Window Algorithm)是一种常用的限流(Rate Limiting)技术,广泛应用于接口防刷、API限流、网络流量控制等场景。…

滑动窗口算法

  • 概述
  • 原理
    • 窗口定义
    • 窗口滑动
    • 请求统计
  • 实现
    • 代码定义
    • 示例
      • IP限流控制

概述

滑动窗口算法(Sliding Window Algorithm)是一种常用的限流(Rate Limiting)技术,广泛应用于接口防刷、API限流、网络流量控制等场景。它的核心思想是:在一个固定长度的时间窗口内,统计请求的数量,如果超过了设定的阈值,则拒绝后续请求,否则允许通过。

原理

窗口定义

设定一个时间窗口(如1分钟),窗口内最多允许N次请求。

窗口滑动

窗口不是固定的,而是随着时间的推移不断“滑动”。每次有新请求到来时,窗口的起止时间会根据当前时间动态调整。

请求统计

统计当前窗口内的请求数。如果请求数未超过阈值,则允许通过;否则拒绝。

实现

代码定义

 @Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** 是否能通过滑动窗口的验证* 滑动窗口算法:*     描述:滑动窗口校验算法是一种用于数据流处理的高效技术,特别适用于网络通信、数据压缩和实时系统等领域。它通过维护一个动态窗口来校验数据的完整性或检测重复数据。*     核心概念:*      1. 窗口定义:固定大小的缓冲区,用于存储最近处理的数据*      2. 窗口滑动:新数据加入时,最旧的数据被移出窗口*      3. 校验机制:对窗口内的数据进行特定校验(如CRC、哈希或重复检测)* @param key 事件标识* @param windowPeriod 窗口限流的周期,单位是毫秒* @param windowSize 滑动窗口大小* @return*/public boolean passThough(String key, long windowPeriod, int windowSize) {//风控keyString riskControlKey = IMPlatformConstants.getKey(IMPlatformConstants.RISK_CONTROL_KEY_PREFIX, key);//获取当前时间long currentTimeStamp = System.currentTimeMillis();// 表示整个滑动窗口的总时长,也就是系统会在这个时长内统计请求数量,判断是否超过限流阈值。long length = windowPeriod * windowSize;long start = currentTimeStamp - length;//计算过期时间long expireTime = length + windowPeriod;redisTemplate.opsForZSet().add(riskControlKey, String.valueOf(currentTimeStamp), currentTimeStamp);// 移除[0,start]区间内的值redisTemplate.opsForZSet().removeRangeByScore(riskControlKey, 0, start);// 获取窗口内元素个数Long count = redisTemplate.opsForZSet().zCard(riskControlKey);// 过期时间 窗口长度+一个时间间隔redisTemplate.expire(riskControlKey, expireTime, TimeUnit.MILLISECONDS);//count为空不能通过if (count == null) {return false;}return count <= windowSize;}

可以看到,passThough 方法基于Redis 容器实现了一个滑动窗口算法。

示例

IP限流控制

比如:我们现在有一个需求,需要根据IP 进行限流控制 1秒内同一个IP 只允许访问10 次,那么调用

public static void main(String[] args) {RedisSlidingWindowLimitService limitService = new RedisSlidingWindowLimitService();// 需要限制的IP地址, 实际业务动态获取String ip = "127.0.0.1";// 窗口限流的最小周期,单位是毫秒,计算方式就是 windowPeriod = 限制周期 / 窗口大小,在这里就是 1000 / 10 = 100;long windowPeriod = 100;// 滑动窗口大小, 也就是限制的数量int windowSize = 10;boolean result = limitService.passThough(ip, windowPeriod, 10);if (!result) {System.out.println("当前IP访问达到阈值,不允许访问了!");}}

注意点:算法中 length 代表需要统计窗口的周期,我们的需求是 1秒内同一个IP最大访问10次, 所以 windowPeriod = 1000(毫秒) / 10;

http://www.dtcms.com/wzjs/828428.html

相关文章:

  • 工程认证网站的建设the word 和 wordpress
  • 专门做研究美股的财经网站福州建网站
  • 哪个网站教做衣服哪个网站可以做视频片头
  • 做公众好号的网站wordpress 页面显示分类文章列表
  • 电商企业网站建设的一般要素有哪些6跨境商城网站建设
  • 可以申请微信号的网站北京网站建设多少钱
  • 上海定制网站建设公司自适应网站建设哪家好
  • 安徽住房城乡建设厅网站wordpress最常用水印
  • 水果零售电子商务网站综合评价与建设研究云虚拟主机怎么做2个网站
  • 广告传媒公司排名石家庄网站seo
  • 毕业设计做网站有什么好处网站充值记账凭证怎么做
  • 多个域名 指向同一个网站工业互联网平台评价方法
  • 包工头接活网站app建平台网站
  • 搞网站建设赚钱不wordpress添加形式
  • 广州越秀建网站网站备案与服务器
  • 集团高端网站建设公司做网站时字幕怎么做
  • 做外贸推广的网站前端网站开发
  • 做谷歌网站使用什么统计代码东莞seo网站排名优化公司
  • 做网站用的动漫资料html5网站建站书
  • 我做的网站搜不到中小型网站建设流程
  • 双拥网站建设申请公司建站系统
  • 网站app生成器贵州网站设计
  • 一个电信ip做网站卡不卡专门做家具的网站
  • 方案设计基本步骤抚顺网站seo
  • 刚备案的域名如何做网站营销软文是什么意思
  • 郑州做网站最好的公司九寨沟网站建设规划书
  • 金山集团网站建设龙华营销型网站制作
  • 设计数码产品宣传网站线报网站如何做
  • 濮阳公司网站建设企业最近营销热点
  • wordpress网站更改不见什么是seo和sem