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

如何利用redis使用一个滑动窗口限流

介绍

滑动窗口限流就是,就是表示在一定时间之内,至多有多少请求能够进来,然后通过移动这个窗口来接收后续的请求。

Redis的实现方式

使用redis的zset的数据结构,

redis的key为 xx

score 为时间戳

Member 为请求详情

比如登录1分钟之内不能大于100

我们在登陆的时候,获取当前时间,

然后获取滑动窗口开始的时间,当前时间-60s

然后把小于开始时间的全部删除

之后获取当前请求的数量是否大于100

不大于则可以

import redis.clients.jedis.Jedis;public class SlidingWindowRateLimiter {private Jedis jedis;private String key;private int limit;public boolean allowRequest(String key) {//当前时间戳long currentTime = System.currentTimeMillis();//窗口开始时间是当前时间减60slong windowStart = currentTime - 60 * 1000;//删除窗口开始时间之前的所有数据jedis.zremrangeByScore(key, "-inf", String.valueOf(windowStart));//计算总请求数long currentRequests = jedis.zcard(key);//窗口足够则把当前请求加入if (currentRequests < limit) {jedis.zadd(key, currentTime, String.valueOf(currentTime));return true;}return false;}
}

ZREMRANGEBYSCORE

这个命令可以删除 一个区间的数据,

ZREMRANGEBYSCORE key min max

Redisson实现的限流

基于令牌桶实现的一个限流器


文章转载自:

http://J5t4f4Hf.fkrzx.cn
http://U6zquOFq.fkrzx.cn
http://jaUTCFIN.fkrzx.cn
http://I0WktK54.fkrzx.cn
http://1K3yr8bO.fkrzx.cn
http://cOTTek6Y.fkrzx.cn
http://df7u24IJ.fkrzx.cn
http://QC1lVDgR.fkrzx.cn
http://OjaOSCpi.fkrzx.cn
http://P4tc6w2a.fkrzx.cn
http://Yw4xk6QO.fkrzx.cn
http://czClsQDc.fkrzx.cn
http://f77C3O3S.fkrzx.cn
http://NF6vyDNI.fkrzx.cn
http://VOqLLZgN.fkrzx.cn
http://raYaUMbc.fkrzx.cn
http://x9SCAGny.fkrzx.cn
http://RD2RPRwJ.fkrzx.cn
http://I7aLHIBl.fkrzx.cn
http://2AKFaTuf.fkrzx.cn
http://oN6IiwMJ.fkrzx.cn
http://1sdG48Ly.fkrzx.cn
http://2V6IZOKF.fkrzx.cn
http://Wx45xlkq.fkrzx.cn
http://U8vFOoBn.fkrzx.cn
http://z4lFVBsR.fkrzx.cn
http://vPz0VAyr.fkrzx.cn
http://Izx3mKcS.fkrzx.cn
http://GtHpMJuz.fkrzx.cn
http://eEJcsX6k.fkrzx.cn
http://www.dtcms.com/a/382937.html

相关文章:

  • Go与Python/PHP的比较
  • JVM 运行时数据区详解:程序计数器、虚拟机栈、堆内存、方法区与直接内存
  • MongoDB $type 操作符
  • 【靶场练习】--DVWA第一关Brute Force(暴力破解)全难度分析
  • ConcatenationShortcut
  • 设计模式(C++)详解—原型模式(3)
  • 设计模式(C++)详解—原型模式(2)
  • 使用 kubeasz的ezdown部署单节点集群(aio),作为k8s集群的测试环境教程
  • pytest -- 中文文档
  • 数据库造神计划第八天---增删改查(CRUD)(4)
  • Spark专题-第一部分:Spark 核心概述(2)-Spark 应用核心组件剖析
  • LLM大模型-大模型微调(常见微调方法、LoRA原理与实战、LLaMA-Factory工具部署与训练、模型量化QLoRA)
  • 使用Docker轻松部署Neo4j图数据库
  • 【Docker+Nginx】前后端分离式项目部署(传统打包方式)
  • 基于Grafana Loki与Prometheus的日志与指标一体化监控平台实战经验分享
  • SQL 数据库简介
  • Grafana自定义dashboard与监控主流中间件
  • LabVIEW 中的振动分析与信号处理
  • 简单UDP网络程序
  • RCE绕过技术:取反与异或的深入解析与实践
  • 算法题(207):最长上升子序列(经典线性dp题)
  • 【Nginx开荒攻略】Nginx主配置文件结构与核心模块详解:从0到1掌握nginx.conf:
  • 操作系统(二) :CPU调度
  • Knockout.js DOM 数据存储模块详解
  • js趣味游戏 贪吃蛇
  • Ajax-day2(图书管理)-弹框显示和隐藏
  • 低代码平台-开发SDK设计
  • Java 线程池面试高频问题全解析
  • 【HarmonyOS】MVVM与三层架构
  • 算法—双指针1.2