当前位置: 首页 > news >正文

厦门好景科技做网站高端品牌网站建设方案

厦门好景科技做网站,高端品牌网站建设方案,全媒体广告策划营销,深圳市造价信息网我们可以使用策略模式来统一单机限流和分布式限流的实现,提高代码的可扩展性和可维护性。 思路是定义一个 RateLimitStrategy 接口,并分别实现单机限流策略 LocalRateLimitStrategy 和分布式限流策略 DistributedRateLimitStrategy。在 AOP 切面中,根据配置决定使用哪种限流策…我们可以使用策略模式来统一单机限流和分布式限流的实现,提高代码的可扩展性和可维护性。 思路是定义一个 RateLimitStrategy 接口,并分别实现单机限流策略 LocalRateLimitStrategy 和分布式限流策略 DistributedRateLimitStrategy。在 AOP 切面中,根据配置决定使用哪种限流策略。 定义策略接口 public interface RateLimitStrategy {boolean tryAcquire(String key, double qps, long timeout, TimeUnit timeUnit); }实现单机限流策略 import com.google.common.util.concurrent.RateLimiter;import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit;public class LocalRateLimitStrategy implements RateLimitStrategy {private final MapString, RateLimiter rateLimiters new ConcurrentHashMap();Overridepublic boolean tryAcquire(String key, double qps, long timeout, TimeUnit timeUnit) {RateLimiter limiter rateLimiters.computeIfAbsent(key, k - RateLimiter.create(qps));if (timeout 0) {return limiter.tryAcquire(timeout, timeUnit);} else {return limiter.tryAcquire();}} }实现分布式限流策略 import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.RedisScript;import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit;public class DistributedRateLimitStrategy implements RateLimitStrategy {private final RedisTemplateString, Object redisTemplate;public DistributedRateLimitStrategy(RedisTemplateString, Object redisTemplate) {this.redisTemplate redisTemplate;}Overridepublic boolean tryAcquire(String key, double qps, long timeout, TimeUnit timeUnit) {long window timeUnit.toSeconds(timeout);ListString keys Collections.singletonList(key);String luaScript buildLuaScript();RedisScriptLong redisScript new DefaultRedisScript(luaScript, Long.class);Long currentCount redisTemplate.execute(redisScript, keys, Collections.singletonList(window), Collections.singletonList(qps));return currentCount qps;}private String buildLuaScript() {return local key KEYS[1]\n local window tonumber(ARGV[1])\n local qps tonumber(ARGV[2])\n local current redis.call(incrBy, key, 1)\n if current 1 then\n redis.call(expire, key, window)\n end\n if current qps then\n return redis.call(decrBy, key, 1)\n else\n return current\n end;} }修改切面逻辑 import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import java.util.concurrent.TimeUnit;Aspect Component public class RateLimitAspect {Autowiredprivate RateLimitStrategy rateLimitStrategy;Around(annotation(rateLimitAnnotation))public Object around(ProceedingJoinPoint joinPoint, RateLimit rateLimitAnnotation) throws Throwable {String key joinPoint.getSignature().toLongString();double qps rateLimitAnnotation.qps();long timeout rateLimitAnnotation.timeout();TimeUnit timeUnit rateLimitAnnotation.timeUnit();boolean acquired rateLimitStrategy.tryAcquire(key, qps, timeout, timeUnit);if (!acquired) {throw new RuntimeException(Rate limit exceeded);}return joinPoint.proceed();} }在切面逻辑中,我们注入了 RateLimitStrategy 的实现类。根据配置决定使用单机限流还是分布式限流策略。 使用示例 RestController public class DemoController {Autowiredprivate RateLimitStrategy rateLimitStrategy;GetMapping(/test)ApiRateLimit(qps 10, timeout 60, timeUnit TimeUnit.SECONDS)public String test() {return hello world;} }在使用时,我们只需要在方法上标注 RateLimit 注解即可,而不需要关心底层使用的是单机限流还是分布式限流。 配置限流策略 在 Spring 配置中,我们可以根据需求注入不同的 RateLimitStrategy 实现类: // 单机限流配置 Bean public RateLimitStrategy localRateLimitStrategy() {return new LocalRateLimitStrategy(); }// 分布式限流配置 Bean public RateLimitStrategy distributedRateLimitStrategy(RedisTemplateString, Object redisTemplate) {return new DistributedRateLimitStrategy(redisTemplate); }通过使用策略模式,我们将限流算法与具体的限流策略解耦,提高了代码的可扩展性和可维护性。未来如果需要新的限流策略,只需要实现 RateLimitStrategy 接口并配置即可,无需修改核心的限流逻辑。
http://www.hkea.cn/news/14383320/

相关文章:

  • 深圳做商城网站建设网站建设 青海
  • 重庆模板网站建设怎么样网站建设流行技术
  • 外链网站是什么手机报价
  • win10做网站服务器自己建一个网站需要多少钱?
  • 千灯做网站做淘宝客如何引出图片到网站
  • 电信宽带做网站服务器可以直接进入的正能量网站
  • 预订网站模板公司怎样做网络推广
  • 广州企业网站哪家好博客一号wordpress主题
  • 天津网站seo设计微网站建设教程视频
  • 怎么做网站视频教程网站托管服务适合用于哪种类型的网站
  • 东莞网站建设最优html网页制作参考文献
  • 毕业设计某网站开发的开题报告范文南联网站建设哪家好
  • 专业深圳网站定制开发建网站学什么软件
  • 电商网站建设wordpress模拟接口
  • 给学校建网站那个系统好杭州房价暴跌已开始
  • 网站开发 税率小说推广赚钱
  • 自助建站系统介绍网站由谁备案
  • 网站建设开发定制如何在平台上推广产品
  • 有什么设计网站推荐个人免费建站的网站
  • 如何做拼车网站app无锡建设管理服务中心
  • 第三方做农产品价格数据的网站app网站建设手机APP软件开发
  • 安陆网站制作公司wordpress feedsky
  • 自己做网站 搜索功能开发wordpress几种系统
  • 深圳地铁建设集团网站手机怎么查看网站代码实现的
  • 江苏住房建设厅网站福州网站制作系统
  • 网站建设 青岛网站配置域名解析
  • mip网站模板wordpress版本
  • 网站 编程语言网站建设高端网页设计
  • 闵行建设机械网站好游快游app官方网站下载
  • 世纪购网站开发招聘丰联汽配网站建设成本