redis + lua实现分布式接口限流实现方案

97b0036f4cf570c460567e229cc404e5.gif

作者 | 步尔斯特

来源 | 步尔斯特

前言

redis + lua脚本已然成为了单体项目主流的限流方案。

redis凭借其特性成为了中间件的佼佼者,最新官方测试数据:

  • 读的速度是110000次/s

  • 写的速度是81000次/s。

lua:

  • 减少网络开销:使用Lua脚本,无需向Redis 发送多次请求,执行一次即可,减少网络传输

  • 原子操作:Redis 将整个Lua脚本作为一个命令执行,原子,无需担心并发

  • 复用:Lua脚本一旦执行,会永久保存 Redis 中,,其他客户端可复用

操作

在需要限流的接口处添加如下注解(@RedisLimit),在原有基础上,无需添加任何依赖即可实现限流。

@RedisLimit(name = "订单秒杀", prefix = "seckill", key = "distributed", count = 1, period = 1, limitType = LimitType.IP, msg = "当前排队人数较多,请稍后再试!")
@GetMapping("/limit/distributed/{id}")
public ResponseEntity<Object> limitDistributed(@PathVariable("id") String id) {return ResponseEntity.ok("成功购买:" + id + "个");
}

介绍

/*** 资源名称*/
String name() default "";/*** 前缀*/
String prefix() default "";/*** 资源key*/
String key() default "";/*** 最多访问次数*/
int count();/*** 时间,秒级*/
int period();/*** 类型*/
LimitType limitType() default LimitType.CUSTOMER;/*** 提示信息*/
String msg() default "系统繁忙,请稍后再试";

功能

  • 默认根据全局接口的QPS作为流控指标

  • 可在独立IP和全局接口自由切换

  • 可自定义时间及规定时间内的QPS

  • 可根据key值做后期的数据监控和统计

原理

  • 以流量作为切点、滑动时间窗口作为核心算法。

  • lua脚本以保证其原子性操作

核心代码(部分展示)

lua脚本

redis.replicate_commands();
local listLen,time
listLen = redis.call('LLEN', KEYS[1]) 
if listLen and tonumber(listLen) < tonumber(ARGV[1]) then
local a = redis.call('TIME');
redis.call('LPUSH', KEYS[1], a[1]*1000000+a[2]) 
else
time = redis.call('LINDEX', KEYS[1], -1)
local a = redis.call('TIME');
if a[1]*1000000+a[2] - time < tonumber(ARGV[2])*1000000 then
return 0;
else
redis.call('LPUSH', KEYS[1], a[1]*1000000+a[2])
redis.call('LTRIM', KEYS[1], 0, tonumber(ARGV[1])-1)
end
end
return 1;

切点处理

Long number = redisTemplate.execute(SECKILL_SCRIPT, keys, count, period);
if(number != null && number.intValue() == 1){return pjp.proceed();}

dcb933339e53e42bef747c4a46437b38.gif

往期推荐

一篇文章了解 Docker 的安装、启动以及工作原理!

剖析 kubernetes 集群内部 DNS 解析原理

Docker 镜像和容器的导入导出及常用命令

如何从 Docker 镜像里提取 dockerfile!

c97ef7a38d18249044ca2f98160430e0.gif

点分享

be027d0d9763bfaa3b35730c7696b21f.gif

点收藏

696a8f41cfcd6e023326ca072cafad24.gif

点点赞

1f90725723055c3630018bd99d272314.gif

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务用户为什么要用云原生网关

简介&#xff1a;下文将为你解说云原生网关如何助你解决一系列痛点&#xff0c;优雅玩转云上微服务架构升级。 作者&#xff1a;百丈 随着云原生技术的发展&#xff0c;微服务的架构选型也是日新月异。在 Kubernetes 重塑运维体系的云时代&#xff0c;我们在安全、降本提效、…

15 分钟实现企业级应用无损上下线

简介&#xff1a;很多用户量大并发度高的应用系统为了避免发布过程中的流量有损&#xff0c;一般选择在流量较小的半夜发布&#xff0c;虽然这样做有效果&#xff0c;但不可控导致背后的研发运维成本对企业来说是一笔不小的负担。基于此&#xff0c;阿里云微服务引擎 MSE 在应用…

基于 Observable 构建前端防腐策略

简介&#xff1a;To B 业务的生命周期与迭代通常会持续多年&#xff0c;随着产品的迭代与演进&#xff0c;以接口调用为核心的前后端关系会变得非常复杂。在多年迭代后&#xff0c;接口的任何一处修改都可能给产品带来难以预计的问题。在这种情况下&#xff0c;构建更稳健的前端…

动态卡片:富媒体内容井喷式增长下,新一代移动端动态研发的模式

简介&#xff1a;「蚂蚁动态卡片」新品发布会全程回顾 在 iOS 和 Android 系统近期推送的更迭版本中&#xff0c;系统环境已经逐渐发展出了将部分内容和服务前置化展示的趋势。 同时&#xff0c;伴随着富媒体内容井喷式增长以及内容的多样化、年轻化&#xff0c;一款移动应用…

Windows 上创建的文件,上传到 Linux 服务器,文件名乱码?

作者 | 刘光录来源 | TIAP先来说一下问题&#xff0c;在 Windows 下创建的一系列文件&#xff0c;上传到 Linux 服务器后&#xff0c;出现文件名乱码&#xff0c;导致文件无法读取的情况。事情的起因是这样的...最近有这样一个需求&#xff1a;在Java Web工程中读取本地某一个文…

阿里云成为首个通过“虚拟化云平台性能测试(大规模)”的云厂商

简介&#xff1a;2021年7月27日&#xff0c;在可信云大会上&#xff0c;中国信息通信研究院发布了《虚拟化云平台性能评估方法》&#xff0c;同时&#xff0c;宣布了阿里云成为首个通过“虚拟化云平台性能测试&#xff08;大规模&#xff09;”的云厂商&#xff0c;并获得“202…

阿里云神龙团队拿下TPCx-BB排名第一的背后技术

简介&#xff1a;阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000世界排名第一的成绩。 一 背景介绍 近日&#xff0c;TPC Benchmark Express-BigBench(简称TPCx-BB)公布了最新的世界排名&#xff0c;阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000排名第…

从中国移动财报透视:什么在支撑移动云发展韧性?

8 月 11 日&#xff0c;中国移动公布 2022 年中期业绩报告。报告显示&#xff0c;上半年中国移动营运收入达人民币 4969 亿元&#xff0c;同比增长 12.0%。净利润 703 亿元&#xff0c;同比增长 18.9%&#xff0c;盈利能力全球领先。其中&#xff0c;移动云收入达人民币 234 亿…

vue 前期准备,项目结构

环境 1、node -v 检测 没有就下载node&#xff0c;装到C盘 http://nodejs.cn/download/ 2、vue -v 检测 没有就 npm install -g vue/cli 或者 yarn global add vue/cli 安装脚手架 网址 https://cli.vuejs.org/zh/ 也可以从网址里找到…

如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始

简介&#xff1a;业级应用架构是在不断的演进和迭代&#xff0c;但是我始终感觉企业应用架构的形成过程是在一种看起来科学的方法论下&#xff0c;但是又不完全科学的过程中实现的。 作者&#xff1a;焦方飞 大年初一&#xff0c;看完中国队 1:3 越南队的比赛&#xff0c;在思…

如何从容应对复杂性

简介&#xff1a;软件的复杂性&#xff0c;是一个很泛的概念。但是一直都是开发过程中的一个难题&#xff0c;本文旨在探讨如何去从容应对复杂性。 作者 | 無涯 来源 | 阿里技术公众号 软件的复杂性&#xff0c;是一个很泛的概念。 但是一直都是开发过程中的一个难题&#xf…

阿里巴巴开源大规模稀疏模型训练/预测引擎DeepRec

简介&#xff1a;经历6年时间&#xff0c;在各团队的努力下&#xff0c;阿里巴巴集团大规模稀疏模型训练/预测引擎DeepRec正式对外开源&#xff0c;助力开发者提升稀疏模型训练性能和效果。 作者 | 烟秋 来源 | 阿里技术公众号 经历6年时间&#xff0c;在各团队的努力下&#…

产学融合如何促进技术创新,英特尔打了个样

作者 | 宋慧 出品 | CSDN 经过多年的积累与扎实科研&#xff0c;中国的科学与技术水平正在达到和超越世界一线水平。这离不开中国有基数庞大的用户和应用场景&#xff0c;为科学界和工业界提供了将理论付诸实践的机会&#xff0c;反复打磨迭代&#xff0c;以提升技术指标。 作…

3大能力升级,云效+钉钉,让研发协作更「敏捷」

简介&#xff1a;你的团队是否面临如下问题&#xff1a;没有敏捷经验&#xff0c;不知道如何落地敏捷或者敏捷实施不规范&#xff1f;研发交付过程信息更新不及时&#xff0c;无法及时跟进交付结果&#xff1f;员工入职离职&#xff0c;多套账号权限管理难&#xff1f;缺乏交付…

阿里云张献涛:自主最强DPU神龙的秘诀

简介&#xff1a;读懂云计算&#xff0c;才能看清DPU热潮。 微信公众号搜索“弹性计算百晓生”&#xff0c;获取更多云计算知识。 如果细数最近火爆的科技概念&#xff0c;DPU必然位列其中。 这是英伟达一手捧红的新造富故事&#xff0c;是2021年SoC领域最热火朝天的创业赛道…

Gartner发布2022年新兴技术成熟度曲线,推动沉浸式、AI自动化发展

编辑 | 宋慧 供稿 | Gartner Gartner 2022年新兴技术成熟度曲线列出了25项值得关注的新兴技术&#xff0c;这些技术正在推动沉浸式体验的发展和扩展、加速人工智能&#xff08;AI&#xff09;自动化并优化技术人员交付。 Gartner研究副总裁Melissa Davis表示&#xff1a;“新兴…

阿里云张献涛:公共云正不断向外延伸,一云多态是未来趋势

简介&#xff1a;一云多态是公有云的未来趋势&#xff0c;包括产品的多形态、部署的多形态和生态的多形态。 编者按&#xff1a;2021年10月22日&#xff0c;在云栖大会《一云多形态部署最佳实践》分论坛&#xff0c;阿里巴巴集团研究员、阿里云弹性计算产品线负责人张献涛发表…

4种典型限流实践保障应用高可用|云效工程师指北

简介&#xff1a;4种典型限流实践保障应用高可用&#xff0c;本文总结了一份AHAS限流实践指南&#xff0c;如果你的系统有被恶意用户攻击的风险&#xff0c;或者系统中某个应用出现异常可能会造成雪崩效应&#xff0c;那么这篇文章会对你有所帮助。 大家好&#xff0c;我叫黄博…

阿里巴巴云原生大数据运维平台 SREWorks 正式开源

简介&#xff1a;阿里巴巴云原生大数据运维平台 SREWorks&#xff0c;沉淀了团队近10年经过内部业务锤炼的 SRE 工程实践&#xff0c;今天正式对外开源&#xff0c;秉承“数据化、智能化”运维思想&#xff0c;帮助运维行业更多的从业者采用“数智”思想做好高效运维。 作者 | …

阿里云 VPC 内网性能测试最佳实践

简介&#xff1a;本文介绍了在阿里云 VPC 内网执行性能测试的方法。相较于传统的公网性能测试&#xff0c;VPC 内网性能测试完全在客户 VPC 环境进行&#xff0c;无需暴露服务到公网&#xff0c;安全性更高&#xff0c;灵活性更强。 作者:风起 背景 随着互联网的快速发展&am…