public class FlowControl { private static Logger logger = LoggerFactory.getLogger(FlowControl.class); /** * @Title: allow @Description: 进行流量控制,允许访问返回true 不允许访问返回false * @param: @param key 放入redis的key,放入前要在key之前添加前缀 前缀配置在eds.properties中的 redis.prefix * @param: @param timeOut 超时时间单位秒 * @param: @param count 超时时间内允许访问的次数 * @param: @return * @param: @throws * Exception @return: boolean @throws */ public static boolean allow(String key, int timeOut, int count) { Boolean useFc = Boolean.valueOf(EdsPropertiesUtil.getInstance().getProperty("flowControl.use")); // 若不使用流量控制直接返回true if (!useFc) { return true; } boolean result = false; Jedis jedis = null; String prefix = EdsPropertiesUtil.getInstance().getProperty("redis.prefix"); key = prefix + key; try { jedis = RedisUtil.getJedis(); Long newTimes = null; Long pttl = jedis.pttl(key); if (pttl > 0) { newTimes = jedis.incr(key); if (newTimes > count) { logger.info("key:{},超出{}秒内允许访问{}次的限制,这是第{}次访问", new Object[] { key, timeOut, count, newTimes }); } else { result = true; } } else if (pttl == -1 || pttl == -2 || pttl == 0) { Transaction tx = jedis.multi(); Response<Long> rsp1 = tx.incr(key); tx.expire(key, timeOut); tx.exec(); newTimes = rsp1.get(); if (newTimes > count) { logger.info("key:{},{}秒内允许访问{}次,第{}次访问", new Object[] { key, timeOut, count, newTimes }); } else { result = true; } } if (result) { logger.debug("key:{},访问次数{}", new Object[] { key, newTimes }); } } catch (Exception e) { logger.error("流量控制发生异常", e); e.printStackTrace(); // 当发生异常时 允许访问 result = true; } finally { jedis.close(); } return result; } }
相关推荐
系统在运行过程中,如遇上某些活动,访问的人数会在...使用流量控制可以减轻服务器压力,避免服务器挂掉。本文介绍php基于redis,使用令牌桶算法,实现访问流量的控制,提供完整算法说明及演示实例,方便大家学习使用。
基于redis实现分布式实战 图解Redis中的AOF和RDB持久化策略的原理 redis读写分离架构实践 redis哨兵架构及数据丢失问题分析 redis Cluster数据分布算法之Hash slot redis使用常见问题及性能优化思路 redis高...
常见的分布式系统存储解决方案,包括MySQL的分布式扩展、HBase的API及使用场景、Redis的使用等。 如何使用分布式消息系统ActiveMQ来降低系统之间的耦合度,以及进行应用间的通信。 垂直化的搜索引擎在分布式...
基于 Vue/Element UI 和 Spring Boot/Spring Cloud & Alibaba 前后端分离的分布式微服务架构权限管理系统,同时提供了 Vue3 的版本。若依是一套全部开源的快速开发...流量控制框架选型Sentinel,分布式事务选型Seata。
它与Redis ,进程Memory , Cluster或PM2 , Memcached , MongoDB , MySQL , PostgreSQL一起使用,并允许在单个进程或分布式环境中控制请求速率。 原子增量。 内存或分布式环境中的所有操作都针对竞争条件使用...
采用前后端分离的模式,微服务版本前端(基于 RuoYi-Vue)。后端采用Spring Boot、Spring Cloud & ...流量控制框架选型Sentinel,分布式事务选型Seata。提供了技术栈(Vue3 Element Plus Vite)版本RuoYi-Cloud-Vue3
流量控制框架选型Sentinel,分布式事务选型Seata。提供了技术栈(Vue3 Element Plus Vite)版本RuoYi-Cloud-Vue3,保持同步更新。如需不分离应用,请移步 RuoYi,如需分离应用,请移步 RuoYi-Vue阿里云折扣场:点我...
基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统。采用前后端分离的模式,微服务版本前端(基于 RuoYi-Vue)。后端采用Spring Boot、Spring ...流量控制框架选型Sentinel,分布式事务选型Seata。
限流的场景有很多,常说的限流一般指网关限流,控制好洪峰流量,以免此处展开偏向偏业务应用的分布式限流的原因,是因为区别于网关限流,业务侧限流可以轻松根据业务性质做到细粒度的流量控制。 案例一: 有一个公开...
本项目基于Spring Boot+Spring Cloud+Alibaba实现的企业...流量控制框架选型Sentinel,分布式事务选型Seata; 提供了技术栈(Vue3 Element Plus Vite)版本RuoYi-Cloud-Vue3,保持同步更新。 项目代码可直接编译运行~
流量控制框架选型Sentinel,分布式事务选型Seata。 商品管理:商品类型,规格,详情等设置。 采购管理:采购单录入。 销售管理:销售单录入。 库存管理:库存查询、库存日志 127.0.0.1 nacos 127.0.0.1 mysql ...
使用ADSl使用统一的,稳定的IP出口提供代理服务(而不需要沉重的redis负担) Echo支持sdk,目前提供完善的android APK和gradle依赖(这个作用你懂的 :beaming_face_with_smiling_eyes: ) Echo分布式设计,天然...
秒杀系统 单机高并发(lua脚本实现) redis rabbitMQ处理高并发 实现订单模块(下游) 死信队列实现定时任务 ...sentinel 实现流量控制 分布式事务TCC 防止超卖的问题在本项目中都得到了很好地解决
流量控制框架选型Sentinel,分布式事务选型Seata。 如需不分离应用,请移步 ,如需分离应用,请移步 阿里云折扣场:,腾讯云秒杀场: 阿里云优惠券:,腾讯云优惠券: 友情链接 Ant Design版本。 系统模块 ...
3.10 使用Hystrix实现隔离 51 3.10.1 Hystrix简介 51 3.10.2 隔离示例 52 3.11 基于Servlet 3实现请求隔离 56 3.11.1 请求解析和业务处理线程池分离 57 3.11.2 业务线程池隔离 58 3.11.3 业务线程池监控/运维/降级 ...
使用分布式文件系统和分布式数据库系统 使用no-sql和搜索引擎 站内搜索 lucene nutch 分词器 no-sql库 mongodb hadoop 业务拆分 web service restful 分布式服务 大型...
当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等,而部分数据库如Redis、MySQL以及phxsql也可实现消息队列的功能。消息队列是指利用高效可靠的消息传递机制进行与平台无关的数据...
核心功能: 系统管理:用户管理、角色管理、菜单管理、部门管理、岗位管理、字典管理、参数设置、通知公告、日志管理 系统监控:在线用户、定时任务...5、流量控制框架选型Sentinel,分布式事务选型Seata。 6、时序数据
流量控制框架选型Sentinel,分布式事务选型Seata。时序数据库采用TDengine开源、高效的物联网大数据平台、处理物联网海量数据写入与负载查询。支持统一产品模型管理,多种设备,多种厂家,统一设备连接管理,多协议适配...
流量控制框架选型Sentinel,分布式事务选型Seata 内置功能 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 岗位管理:配置...