高并发下限流(学习笔记)
为了解决高并发下,服务的可用,缓存,降级,限流。
那么我们来看看限流。最简单的限流方式,就是这个接口只处理一定的个数的请求,比如只处理10个请求,那么直接就可以算出,计数限流方式。
创建spring boot 应用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version> 1.3 . 0 </version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> |
计算器实现的方式
@RestController public class OrderController { static long limit=10; private long count = 0; @GetMapping("/makeorder") public Result makeOrder(){ long c = ++count; if(c > limit){ Result result=new Result(false,"抢购结束"); return result; } return new Result(true,"成功"); } }
我们可以用jmeter 来请求下,
只处理10个请求,那么多余10个的请求,就应该返回false
我们可以看到前几个是成功,最后一个是失败。
这样来说 相当于一共就是10个请求,不管是那个ip 来请求,一共就接受来10个,这样的问题也会出现的。在分布式部署的情况下,计数是单独的,我们要共享这个计数,我们选择redis ,因为redis 是单线程的。
支持缓存过期,支持数值自增减
支持lua脚本,单线程处理缓存业务
那么我门来看下代码怎么实现,增加需要的依赖包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
代码开发如下
@Autowired private RedisTemplate redisTemplate; static long limit = 10; @GetMapping("/makeorder2") public Result makeOrder(){ long c = redisTemplate.opsForValue().increment("lishi"); if(c > limit){ return new Result(false,"抢购失败"); } return new Result(true,"抢购成功"+c); }
需要配置下redis 相关的内容
spring: redis: host: localhost port: 6379 timeout: 1000 jedis: pool: max-active: 10 max-wait: 2000 max-idle: 10 min-idle: 5
我们来测试下,为来方便我们的测试呢,我门在启动来两个服务,
我们可以用浏览器去请求下
我们在看下redis里面是存储的数据
那么我们这个时候再去请求下,看是否限可以成功
这样一个简易的限流都已经完成来,限流10个,就完成了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?