限流器是什么

当单位时间内,产生并发访问时,在诸如抢购场景下,只有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的使用相关推荐

  1. redisson之RRateLimiter分布式限流

    目录 一.说明 二.代码实现 一.说明 在redis lua+令牌桶算法实现分布式限流这篇文章有介绍,自己通过Lua脚本来实现分布式限流.如果是集成的Jedis等下,是可以采用这篇文章的方法自我实现. ...

  2. 精尽 Redisson 源码分析 —— 限流器 RateLimiter

    1. 概述 限流,无论在系统层面,还是在业务层面,使用都非常广泛.例如说: [业务]为了避免恶意的灌水机或者用户,限制每分钟至允许回复 10 个帖子. [系统]为了避免服务系统被大规模调用,超过极限, ...

  3. 分布式环境下限流器springboot实现,令牌桶

    令牌桶算法: 生产逻辑:程序以恒定的速率产生令牌,然后把令牌放到令牌桶中,令牌桶有一个容量,当令牌桶满了的时候,无法再向桶中放置令牌: 消费逻辑:当想要处理一个请求的时候,则从令牌桶中取出一个令牌,如 ...

  4. JAVA中useDrlimiter方法_今天来讲讲分布式环境下,怎么达到对象共享,以及实现原子性(atomic),以Redis中的Redisson为例(实现分布式锁、分布式限流等)...

    相信各位对redis肯定是不陌生的,一个高吞吐量的内存型结构存储数据库.可用用于很多业务场景,能够有效的解决很多复杂的并发问题,分布式问题. 下面粘一下中文官网介绍: 关于解决对象共享问题,很多方式, ...

  5. 从头开始学Redisson--------限流器

    一.限流器作用 基于Redis的分布式限流器RateLimiter可以用来在分布式环境下现在请求方的调用频率.既适用于不同Redisson实例下的多线程限流,也适用于相同Redisson实例下的多线程 ...

  6. 基于Redis组件之分布式RateLimiter限流

    上文我们介绍了RateLimiter文章路径针对IP来限流的方式,上文的限流方案,只针对单应用情况,分布式集群下就不能使用上文的方式,分布式下的限流方案有很多种,这边展示的是Redis的封装redis ...

  7. 基于Redis的分布式限流详解

    前言 Redis除了能用作缓存外,还有很多其他用途,比如分布式锁,分布式限流,分布式唯一主键等,本文将和大家分享下基于Redis分布式限流的各种实现方案. 一.为什么需要限流 用最简单的话来说:外部请 ...

  8. redisson分布式限流[RRateLimiter]源码分析

    接下来在讲一讲平时用的比较多的限流模块–RRateLimiter 1.简单使用 public static void main(String[] args) throws InterruptedExc ...

  9. 几种限流器(RateLimiter)原理与实现

    来源:https://blog.csdn.net/netyeaxi/article/details/104270337 限流器(RateLimiter)主要有两种算法: 漏桶算法 令牌桶算法 它们都是 ...

最新文章

  1. 用li列表模拟table式的表
  2. MySQL错误:Specified key was too long; max key length is 767 bytes
  3. Qt 独立运行时伴随CMD命令窗口
  4. java动态生成sdk_android、java制作sdk以及自动生成文档
  5. java 动态队列_RabbitMq之动态修改队列参数
  6. ERROR InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0
  7. Horizon View 7 发布Win10桌面三:链接克隆桌面池配置
  8. java在线支付---05_在线支付_编写用于准备请求数据的Servlet
  9. Silverlight DataGrid 在显示数据, 如果遇到全角的符号, 好像会出错. 待测试.
  10. 环境判断:区别h5打开还是weixin打开?
  11. mpls--通过全局路由表和静态路由的因特网接入
  12. [PCB设计] 3、用CAM350修改GERBER文件(删除某些部分)
  13. FX系列PLC编程手册
  14. 7款家用智能摄像头横评:小米、乐橙、TP-LINK、海康威视、360、智汀、华为
  15. NOIP2016 酱油记
  16. Bolt: Anonymous Payment Channels for Decentralized Currencies 学习笔记
  17. 【SSH框架/国际物流商综平台】-03 部门、用户、角色、模块 CURD BRAC认证 细粒度权限控制 BaseAction Page struts.xml *.hbm.xml
  18. 【FreeRTOS】12 任务通知——更省资源的同步方式
  19. AcWing 1875.贝茜的报复
  20. EXCEL词典(xllex.dll)文件丢失或损坏的解决方法

热门文章

  1. python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
  2. 微信小程序入门开发教程
  3. 【VMWARE】克隆linux centos6.5 网络修复笔记
  4. Codeforces 484A - Bits (贪心)
  5. 【飞桨PaddleSpeech语音技术课程】— 一句话语音合成全流程实践
  6. 京东面试详解(渣渣吐血整理版)
  7. 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法
  8. 现代化个人博客系统 ModStartBlog v5.7.0 简约纯白主题,富文本大升级
  9. Entertain Box multiset的应用
  10. BigDecimal 往左移动两位小数_移动信号灯