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

分布式锁升级redi还有zset滑动窗口 6月11日还有6月12日

1.分布式锁
之前用的是redis的set NX EX 手动设了一个过期时间但是存在自动续期问题比如
解锁
A线程拿到锁执行业务
但是业务还没执行完就自动解锁
B拿到锁执行业务
AB并发执行
A执行完直接删除B的锁(Lua脚本有效解决先比较value值相同才删)
但是AB并发问题无法解决所以引入了redisson的watchdog
Rlock lock=new RedissonClient();
try{
lock.trylock(3,-1,key) //拿锁没拿到等待3秒再拿,-1代表开启看门狗
}
catch(Execption e){
Throw Exception(e);
}
finnally{
if(lock.isHeldCurrentThread()) //判断是否是当前线程
{
lock.unlock;
}
}

2.ZSET滑动窗口限流
原理:ZSET集合有一个score score用于存时间戳用来做范围查询 ZCARD查询一个窗口内的元素数量判断请求书是否超出最大请求数
我是用自定义注解加上AOP切面来实现的
1.自定义了一个注解@RateLimit
其中包括四个属性
{
key()
window_time()
max_request()
UserIdArgs()
}
然后这个注解放到Controller的api接口上传入这四个参数
然后AOP切面做了一个获取参数的操作
resolveArgs()方法
通过反射的方式去获取切入点的MethodSignature
通过signature获取参数parameters数组
还有args数组
遍历parameters数组
通过getAnotation判断第一个值是不是RequstParam注解然后在判断参数名是不是传入的参数名
同理通过getAnotation判断第一个值是不是PathParam注解然后在判断参数名是不是传入的参数名
把parademeters数组遍历完 但是有个问题就是一定在注解里显示写出来
然后获取到参数名后组成key执行Lua脚本
Lua脚本主要做的就是
先删除窗口外的所有值用zremrangebyscore 并且算出来窗户口的额左边界值让删除的判定是小于这个左边界值 redis.call('zremrangebyscore', key,'-inf', '('.. min_time)
然后zcard计数当前窗口的请求数如果当前数量为4(我设置的最大请求数是5)此时小于最大请求数就返回4 如果此时请求数量为5那么返回的就是6就是当前是第几个请求
这样在count判断中只用>max_request即可
如果大于就抛业务异常请求过于频繁
如果不大于就继续执行切点方法 return JoinPoint.proceed();

http://www.zskr.cn/news/1513187.html

相关文章:

  • 2026西安沙发翻新换皮换布上门服务哪家靠谱?匠阁/御匠/锦修/优势推荐指南 - 我叫一
  • 基于i.MX 6 SABRE平台的汽车信息娱乐系统开发实战指南
  • 2026指南:防静电泡沫制造企业实力解构——EPE/导电海绵/包装内衬防静电方案专业之选 - 品牌发掘
  • 2026年保定财税公司全面对比,托管服务与价格优势分析! - 互联百晓生
  • 2026年6月可靠的热流道厂家哪个好,电子外壳热流道/整体式热流道/家电热流道/塑胶模具热流道,热流道实力厂家哪家好 - 品牌推荐师
  • Happy Island Designer:3个简单步骤打造你的终极岛屿规划工具
  • 用NLP解剖《从0到1》:文本分析实战指南
  • 前端程序员转大模型:从页面仔到AI产品工程师
  • 告别瞎调参!深入理解WRF中Grid Nudging的松弛系数:guv, gt, gq到底怎么设?
  • 最强模型Claude Fable 5被破解!Anthropic暗箱降智风波引众怒
  • 终极Galgame翻译神器:5分钟快速上手YUKI视觉小说汉化工具
  • 告别卡顿!用MPTCP/MPQUIC调度算法优化你的手机双Wi-Fi/5G网速(附Demo思路)
  • 5分钟掌握免费金融数据获取:AKShare终极指南
  • 评测机不够用?看Hydro OJ如何用‘伸缩组’和‘优先级系统’硬刚恶意刷题攻击
  • 如何高效规划星露谷物语农场:专业免费可视化工具完全指南
  • 终极防休眠解决方案:Move Mouse智能活动模拟工具完整指南
  • 25美元,DIY开源可穿戴智能AI眼镜:Arduino+乐鑫ESP32+DeepSeek项目
  • 别再被厂商的MTBF数据忽悠了!手把手教你读懂硬盘、CPU的真实寿命
  • 从CIFAR到细粒度数据集:手把手教你用SSB基准重新评估你的OSR模型
  • 民宿/网约房数字化升级:基于智能锁的身份核验与远程授权解决方案
  • i.MX27L嵌入式系统设计:Smart Speed™架构与低功耗实战解析
  • Spring ResolvableType说明
  • 别再只会用朴素算法了!LCA问题从入门到精通:倍增与Tarjan实战详解(附C++代码)
  • 5分钟快速上手:CheatEngine-DMA插件高效内存修改完整指南
  • 父亲节不同兴趣的爸爸送什么礼物才不闲置?先看这6个判断标准 - GrowthUME
  • MPC5674F:高效发动机控制核心架构、外设与应用实战解析
  • 2026巴州库尔勒学车考驾照全流程攻略:品类选型、合规标准及落地指南 - GrowthUME
  • MATLAB版非均匀傅里叶变换工具集:含NUSFT原创算法与多种加速实现
  • WordPress AI评论助手:人机协同回复实战指南
  • 汽车电子系统基础芯片(SBC)UJA1169A:设计、选型与实战应用