Redisson 限流器 RRateLimiter的使用
限流器是什么
当单位时间内,产生并发访问时,在诸如抢购场景下,只有10件库存。而用户如果都进行争夺则会产生所谓的超卖问题。这时候用限流器进行限制,则可以很好的解决。使得单位时间内只有指定线程数的客户可以访问,未访问到的客户则进行其他处理。
redisson提供了封装好的限流器,此次便使用 其中的RRateLimiter限流器作为实验demo
Demo
public class redissonTest {//手动创建线程池,符合阿里规范private static final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2,10,3,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),new ThreadPoolExecutor.DiscardOldestPolicy());/**** 限流器* @param*/public static void test (){System.out.println("线程"+Thread.currentThread().getId()+"进入数据区:"+System.currentTimeMillis());}public static void main(String[] args) {Config config=new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("123456");RedissonClient client= Redisson.create(config);RRateLimiter rateLimiter=client.getRateLimiter("rate_limiter");rateLimiter.trySetRate(RateType.PER_CLIENT,5,2, RateIntervalUnit.MINUTES);for (int i=0;i<10;i++){threadPoolExecutor.execute(new Runnable() {@Overridepublic void run() {if(rateLimiter.tryAcquire()) {test();}else {System.out.println("限流器限流了");}}});}}
}
输出结果属实
下面讲解下关键代码
rateLimiter.trySetRate(RateType.PER_CLIENT,5,2, RateIntervalUnit.MINUTES);
这个代码的意思是2分钟内生成5个令牌 ,全局共享
而如何拿到令牌实现限流哪?
这一段,意思是尝试是否可以访问(即获取到令牌了吗?)返回的是个boolean值的函数。我们可以以此来进行处理。
rateLimiter.tryAcquire()
线程池说明
这里说明下线程池的各个参数给不熟悉的朋友
//手动创建线程池,符合阿里规范private static final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2,4,3,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),new ThreadPoolExecutor.DiscardOldestPolicy());
corePoolSize: 线程池维护线程的最少数量 (core : 核心)
maximumPoolSize: 线程池维护线程的最大数量
keepAliveTime: 线程池维护线程所允许的空闲时间
unit: 线程池维护线程所允许的空闲时间的单位
workQueue: 线程池所使用的缓冲队列
handler: 线程池对拒绝任务的处理策略
好了,简单的redisson使用就到这里了。
我是和弦,一名最近回归5线城市的互联网枸杞人。
文章对您有帮助的话,烦请点个赞。
Redisson 限流器 RRateLimiter的使用相关推荐
- redisson之RRateLimiter分布式限流
目录 一.说明 二.代码实现 一.说明 在redis lua+令牌桶算法实现分布式限流这篇文章有介绍,自己通过Lua脚本来实现分布式限流.如果是集成的Jedis等下,是可以采用这篇文章的方法自我实现. ...
- 精尽 Redisson 源码分析 —— 限流器 RateLimiter
1. 概述 限流,无论在系统层面,还是在业务层面,使用都非常广泛.例如说: [业务]为了避免恶意的灌水机或者用户,限制每分钟至允许回复 10 个帖子. [系统]为了避免服务系统被大规模调用,超过极限, ...
- 分布式环境下限流器springboot实现,令牌桶
令牌桶算法: 生产逻辑:程序以恒定的速率产生令牌,然后把令牌放到令牌桶中,令牌桶有一个容量,当令牌桶满了的时候,无法再向桶中放置令牌: 消费逻辑:当想要处理一个请求的时候,则从令牌桶中取出一个令牌,如 ...
- JAVA中useDrlimiter方法_今天来讲讲分布式环境下,怎么达到对象共享,以及实现原子性(atomic),以Redis中的Redisson为例(实现分布式锁、分布式限流等)...
相信各位对redis肯定是不陌生的,一个高吞吐量的内存型结构存储数据库.可用用于很多业务场景,能够有效的解决很多复杂的并发问题,分布式问题. 下面粘一下中文官网介绍: 关于解决对象共享问题,很多方式, ...
- 从头开始学Redisson--------限流器
一.限流器作用 基于Redis的分布式限流器RateLimiter可以用来在分布式环境下现在请求方的调用频率.既适用于不同Redisson实例下的多线程限流,也适用于相同Redisson实例下的多线程 ...
- 基于Redis组件之分布式RateLimiter限流
上文我们介绍了RateLimiter文章路径针对IP来限流的方式,上文的限流方案,只针对单应用情况,分布式集群下就不能使用上文的方式,分布式下的限流方案有很多种,这边展示的是Redis的封装redis ...
- 基于Redis的分布式限流详解
前言 Redis除了能用作缓存外,还有很多其他用途,比如分布式锁,分布式限流,分布式唯一主键等,本文将和大家分享下基于Redis分布式限流的各种实现方案. 一.为什么需要限流 用最简单的话来说:外部请 ...
- redisson分布式限流[RRateLimiter]源码分析
接下来在讲一讲平时用的比较多的限流模块–RRateLimiter 1.简单使用 public static void main(String[] args) throws InterruptedExc ...
- 几种限流器(RateLimiter)原理与实现
来源:https://blog.csdn.net/netyeaxi/article/details/104270337 限流器(RateLimiter)主要有两种算法: 漏桶算法 令牌桶算法 它们都是 ...
最新文章
- 用li列表模拟table式的表
- MySQL错误:Specified key was too long; max key length is 767 bytes
- Qt 独立运行时伴随CMD命令窗口
- java动态生成sdk_android、java制作sdk以及自动生成文档
- java 动态队列_RabbitMq之动态修改队列参数
- ERROR InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0
- Horizon View 7 发布Win10桌面三:链接克隆桌面池配置
- java在线支付---05_在线支付_编写用于准备请求数据的Servlet
- Silverlight DataGrid 在显示数据, 如果遇到全角的符号, 好像会出错. 待测试.
- 环境判断:区别h5打开还是weixin打开?
- mpls--通过全局路由表和静态路由的因特网接入
- [PCB设计] 3、用CAM350修改GERBER文件(删除某些部分)
- FX系列PLC编程手册
- 7款家用智能摄像头横评:小米、乐橙、TP-LINK、海康威视、360、智汀、华为
- NOIP2016 酱油记
- Bolt: Anonymous Payment Channels for Decentralized Currencies 学习笔记
- 【SSH框架/国际物流商综平台】-03 部门、用户、角色、模块 CURD BRAC认证 细粒度权限控制 BaseAction Page struts.xml *.hbm.xml
- 【FreeRTOS】12 任务通知——更省资源的同步方式
- AcWing 1875.贝茜的报复
- EXCEL词典(xllex.dll)文件丢失或损坏的解决方法
热门文章
- python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
- 微信小程序入门开发教程
- 【VMWARE】克隆linux centos6.5 网络修复笔记
- Codeforces 484A - Bits (贪心)
- 【飞桨PaddleSpeech语音技术课程】— 一句话语音合成全流程实践
- 京东面试详解(渣渣吐血整理版)
- 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法
- 现代化个人博客系统 ModStartBlog v5.7.0 简约纯白主题,富文本大升级
- Entertain Box multiset的应用
- BigDecimal 往左移动两位小数_移动信号灯