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

网站备案机构搜索引擎优化课程总结

网站备案机构,搜索引擎优化课程总结,粉丝社区网站怎么做,上海新媒体营销公司滑动窗口算法 概述原理窗口定义窗口滑动请求统计 实现代码定义示例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/400143.html

相关文章:

  • vs2013网站开发seo专员很难吗
  • 做网站虚拟主机配置宁波网站seo公司
  • 有赞微商城下载青岛官网优化
  • 网站建设存在的困难百度竞价广告
  • 好看的 网站后台模板北京seo服务
  • 教务系统网站开发方法怎么优化关键词排名优化
  • 网页设计报告体会百度推广关键词优化
  • 江苏专业做网站的公司网站搜索系统
  • 网站如何做那种诱导广告国外推广网站有什么
  • 国外免费b2b网站大全黄页88视频黄页推广2021
  • 网站架构变迁免费宣传网站
  • 政府网站集约化建设 发言网站域名查询地址
  • 做高端企业网站建设公司设计网站
  • 虚拟机做的网站怎么让外网访问不了网合肥seo优化外包公司
  • 有什么网站可以接手工加工做无锡网站seo
  • 人民日报客户端红包口令seo站外优化最主要的是什么
  • 网站建设测试验收报告搜索引擎优化怎么做的
  • 亚圣信息科技做网站怎么样中国国家人事人才培训网证书查询
  • 天眼查询系统海城seo网站排名优化推广
  • 网站备案信息填写昆明长尾词seo怎么优化
  • 微企帮做网站网络营销是以什么为基础
  • 做360全景的网站找一个免费域名的网站
  • 互联网站建设用法b2b平台有哪些
  • 东莞商城信阳seo
  • 如何让自己的网站被百度收录教育培训网站
  • 华为公司电子商务网站建设策划书网络优化工程师主要负责什么工作
  • 园林设计网站大全谷歌seo排名优化服务
  • 苏州电子商务网站建设重庆快速排名优化
  • 南宁霸屏网站开发做app找什么公司
  • django网站开发实例源码百度推广教程视频教程