Springboot + zset + lua 实现滑动窗口
@Component
public class RedisRateLimiter {@Autowiredprivate RedisTemplate<String, String> redisTemplate;private String luaScript() {return "redis.call('zremrangebyscore', KEYS[1], 0, tonumber(ARGV[1]) - tonumber(ARGV[2]) * 1000) " + // 移除过期的元素"if tonumber(redis.call('zcard',KEYS[1])) < tonumber(ARGV[3]) then " + // 获取当前窗口内的元素数量,如果当前窗口内的元素数据超过窗口大小,删除最旧的元素, 窗口内的元素数量小于窗口大小"redis.call('zadd', KEYS[1], tonumber(ARGV[1]), tonumber(ARGV[1])) " + // 将新元素添加到ZSET中"redis.call('expire', KEYS[1], tonumber(ARGV[2])) " + // 设置过期时间"return true " +"else " +"return false " +"end";}public boolean slideWindowAlgorithmByLua(String key, int limitCount, long windowTime) {long currentTime = System.currentTimeMillis();List<String> argList = new ArrayList<>();argList.add(String.valueOf(currentTime));argList.add(String.valueOf(windowTime));argList.add(String.valueOf(limitCount));RedisScript<Boolean> redisScript = new DefaultRedisScript<>(this.luaScript(), Boolean.class);return Boolean.TRUE.equals(redisTemplate.execute(redisScript, Collections.singletonList(key), argList.toArray()));}}
亲测有效,有何问题,请批评指正!
相关文章:
Springboot + zset + lua 实现滑动窗口
Component public class RedisRateLimiter {Autowiredprivate RedisTemplate<String, String> redisTemplate;private String luaScript() {return "redis.call(zremrangebyscore, KEYS[1], 0, tonumber(ARGV[1]) - tonumber(ARGV[2]) * 1000) " // 移除过期的…...
【深度学习】transformer为什么使用多头注意力极致?为什么不使用一个头
在现代深度学习中,Transformer 模型的多头注意力机制已被广泛应用,特别是在自然语言处理领域。最近我读到一篇有趣的博客文章,详细介绍了为什么 Transformer 采用多头注意力,而不是简单的单头注意力。文章从理论推导到代码实现,对多头注意力机制进行了深入分析。下面我为大…...
利用Excel数据合并到Word功能,官方名为“Word邮件合并”
### 利用Excel数据合并到Word功能,官方名为“Word邮件合并”简介 #### 引言 在日常办公场景中,我们经常需要将Excel中的数据批量插入到Word文档中,比如制作员工工资条、邀请函或是客户信息表等。传统的手工操作不仅耗时耗力,还容易…...
当代世界著名哲学家起名大师颜廷利:全球公认最厉害思想家
21世纪全球公认最厉害思想家颜廷利被认可的原因主要在于他在多个领域的深远影响和卓越贡献。 当代世界著名哲学家起名大师颜廷利教授是一位在思想、哲学、教育、易学、国学、心理学、命名学等多个领域具有深远影响的学者。他被誉为了“世界点赞第一人”,并且在国内外…...
Would you like conda to send this report to the core maintainers? [y/N]:
问题描述 pycharm 打开项目后,底部的进度条可能会一直卡住,提示:Would you like conda to send this report to the core maintainers? [y/N]: 有时候是在 Scanning installed packages,有时候是 Updating Python interpreter 操…...
数据结构编程实践20讲(Python版)—18哈希表
本文目录 18 哈希表(Hash Table)S1 说明特征解决问题S2 示例示例 1示例 2S3 应用应用1: LRU 缓存机制应用2:高级拼写检查器应用3:DNA 序列的 K-mer 计数往期链接 01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树09 B树10 B+树11 线段树12 树状数组13 …...
Html 标题加图标
每个网页选项卡都有一个图标: <meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>主页</title><link rel"icon" href"images/记事本.png&…...
机器学习探索性数据分析 (EDA)
机器学习探索性数据分析 (EDA) 探索性数据分析(Exploratory Data Analysis, EDA)是机器学习工作流中至关重要的一个步骤,通过深入分析和理解数据的结构、分布和相关性,EDA帮助揭示数据背后的故事,并为后续的建模提供有…...
【K8S系列】Kubernetes pod节点Pending或CrashLoopBackOff 问题及解决方案详解【已解决】
在 Kubernetes 中,Pod 是最小的可调度单元,负责运行容器。当 Pod 的状态显示为 Pending 或 CrashLoopBackOff 时,意味着它无法成功启动或持续崩溃。本文将详细分析这两种状态的原因、排查步骤、执行后的结果及相应的解决方案。 一、Pod 状态概…...
【Redis】Zset类型常用命令
文章目录 一. Zset有序集合简介.二. 添加元素相关命令.2.1 向有序集合中添加元素(zadd) 三. 查询元素相关操作.3.1 查询有序集合中的元素个数( zcard zcount)3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)3.3 查询有序集合中指定成员的排名(zrank zrevrank )3.4 查…...
js中map,filter,find,foreach的用法介绍
js中map,filter,find,foreach的用法介绍 在 JavaScript 中,数组提供了一些常用的迭代方法,如 map、filter、find 和 forEach,这些方法允许你对数组中的每个元素进行操作,下面是它们的用法和区别…...
Linux 重置 root 密码
如果您在Linux系统中忘记了root密码,可以按照以下步骤重置: 重启系统。在启动时,当GRUB菜单出现时,选择要启动的内核版本,然后按 e 键编辑启动选项。找到以linux或linux16开头的行,它包含了启动内核的命令…...
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的停车场管理系统
开题报告 随着城市化进程不断加快,汽车保有量持续增长,城市停车问题日益凸显,传统停车场管理手段面临着诸多挑战,诸如管理效率低、人工成本高、信息更新滞后、收费不透明等问题。鉴于此,基于 Web 的智能停车场管理系统…...
博睿数据首届“观测先锋 · 2024 可观测平台创新应用案例大赛”现已启动!
大赛报名火热进行中! 在当今这个数字化、智能化的时代,可观测性技术已经成为企业IT架构中不可或缺的一部分。它能够帮助企业实时监控系统的运行状态,及时发现并解决潜在问题,从而确保业务的稳定性和连续性。博睿数据一体化智能可观…...
笔记:SOME/IP-SD报文中的TTL
问:SOME/IP-SD报文中有几个参数名字都叫的TTL,请问它们有什么不同? 答:在SOME/IP Service Discovery (SOME/IP-SD)协议中,确实有多个与TTL(Time-To-Live)相关的参数,但它们的含义不…...
9.存储过程安全性博客大纲(9/10)
存储过程安全性博客大纲 引言 在数据库系统中,存储过程是一种预先编写好的SQL代码集合,它被保存在数据库服务器上,可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句,如IF条件语句、WHILE循环等,使…...
android 打包成aar
1 先建立的空白新工程(不能有activity,直接建立No Activity的项目就行) 2 建立新library 3 填写自己的内容 4 5 如果代码有红色提示的错误,会提示打包失败,修改红色的错误提示就行...
服务器和中转机在网络安全方面
服务器和中转机(代理服务器)在网络安全方面扮演着不同的角色,各自承担着保护网络资源和控制网络访问的重要职责。 它们在网络安全方面的主要作用: 服务器在网络安全中的角色 1.服务保护: 服务器通常运行着各种网络…...
解决“无法从 System.String 强制转换或转换为 Class 对象”错误
解决“无法从 System.String 强制转换或转换为 Class 对象”错误 在进行 API 自动化时,我必须反序列化响应以解析 API 响应数据。我们使用 Newtonsoft.Json NuGet 来实现这一点。 我在反序列化过程中遇到以下错误 - Newtonsoft.Json.JsonSerializationExceptionH…...
Git:LF will be replaced by CRLF、pytest PermissionError以及Git应用中的一些问题解决及一些使用技巧
一、Git:LF will be replaced by CRLF和pytest: --cov NTERNALERROR PermissionError 1. git warning: LF will be replaced by CRLF in ***file 偶然git add在进行代码提交的时候碰到警告warning: LF will be replaced by CRLF in ***file,原因是编辑的代码内容中…...
MogFace人脸检测模型-large应用指南:从图片上传到结果分析,手把手教学
MogFace人脸检测模型-large应用指南:从图片上传到结果分析,手把手教学 1. 认识MogFace-large:为什么选择这个人脸检测模型 在开始实际操作之前,我们先简单了解下MogFace-large的核心优势。这个模型已经在Wider Face六项榜单上霸榜…...
PyTorch 2.8镜像实际项目:电商短视频自动生成平台从0到1部署纪实
PyTorch 2.8镜像实际项目:电商短视频自动生成平台从0到1部署纪实 1. 项目背景与需求分析 电商行业正面临内容生产的巨大挑战。每天需要制作大量商品展示视频,传统方式需要专业团队拍摄剪辑,成本高、周期长、效率低。我们团队决定基于PyTorc…...
为什么92%的Java团队TCC失败?阿里P8级专家复盘6大反模式与可立即上线的加固模板
第一章:为什么92%的Java团队TCC失败?阿里P8级专家复盘6大反模式与可立即上线的加固模板TCC(Try-Confirm-Cancel)作为分布式事务的经典模式,在高并发、多服务协同场景中本应提供强一致性保障,但阿里内部审计…...
Qwen3.5-9B实战案例:用128K上下文做法律合同比对与风险提示
Qwen3.5-9B实战案例:用128K上下文做法律合同比对与风险提示 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,在专业领域的逻辑推理和长文本处理方面表现出色。本文将重点展示如何利用其128K tokens的超长上下文能力,实现法律合…...
Fay框架监控告警系统设计:异常实时通知
Fay框架监控告警系统设计:异常实时通知 【免费下载链接】Fay fay是一个帮助数字人(2.5d、3d、移动、pc、网页)或大语言模型(openai兼容、deepseek)连通业务系统的agent框架。 项目地址: https://gitcode.com/GitHub_…...
突破百度网盘限速难题:非会员高速下载的技术实现与实战指南
突破百度网盘限速难题:非会员高速下载的技术实现与实战指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 当你急需下载一份600MB的项目资料,却发现百…...
Minecraft 1.12.2 彩色渐变字体模组:打造个性化聊天与物品命名
1. RGB Chat模组:让你的Minecraft文字绚丽多彩 还在用单调的白色文字聊天吗?RGB Chat模组彻底改变了Minecraft 1.12.2版本的文字显示方式。这个轻量级模组只有几百KB大小,却能给你的游戏体验带来质的飞跃。我第一次在服务器里看到彩色渐变文字…...
手把手教你用EAS2搞定maxon电机与elmo驱动器:从参数辨识到运动控制
手把手教你用EAS2实现maxon电机与elmo驱动器的精准控制 在工业自动化和精密运动控制领域,maxon电机以其卓越的性能和可靠性著称,而elmo驱动器则是实现高精度控制的理想选择。本文将带你从零开始,通过EAS2软件完成从硬件连接到参数辨识&#x…...
FPGA驱动OLED屏的SPI时序详解:从状态机设计到显存刷新的优化技巧
FPGA驱动OLED屏的SPI时序优化实战:从状态机重构到显存管理进阶 当你在调试FPGA驱动的OLED屏幕时,是否遇到过这些场景:屏幕刷新时出现肉眼可见的闪烁,快速切换显示内容时出现撕裂现象,或者当系统负载增加时显示更新变得…...
微电网集中式架构vs分布式架构:设计差异与选型依据
微电网作为整合“源、储、荷、网”的新型能源系统,其架构设计直接决定系统的运行效率、可靠性、扩展性与经济性,是微电网规划建设的核心环节。在微电网主流架构中,集中式架构与分布式架构凭借各自的技术特性,适配不同的应用场景与…...
