SpringBoot集成Redisson实现限流(二)

1. 简介

Springboot集成Redisson默认的限流器为令牌桶型限流器,底层是通过lua脚本去实现的。
通过lua脚本我们可以去实现一个滑动窗口限流器,利用ZSET格式数据就可以轻松实现。
springboot集成Redisson就不做讲解,可以参考:springboot集成redisson

2. 滑动窗口lua脚本讲解

-- 移除时间窗口之外的数据,通过ZSET自带的排序score可以轻松做到
redis.call('ZREMRANGEBYSCORE', KEYS[1], 0, tonumber(ARGV[2]) - tonumber(ARGV[3]));
-- 判断当前窗口是否达到限流限制 
if (redis.call('ZCARD', KEYS[1]) >= tonumber(ARGV[1])) then 
return nil; 
end; 
-- 添加对应的数据
redis.call('ZADD', KEYS[1], ARGV[2], ARGV[2]); 
-- 过期时间更新,防止key一直占用
redis.call('pexpire', KEYS[1], ARGV[3]); 
return true;

3. 调用

/**
 * 滑动窗口限流
 * @param key             限流key
 * @param threshold       阈值
 * @param interval        时间间隔
 * @param unit            单位
 * @return true-通过 false-限制
 */
public static boolean rateLimiterSlidingWindow(String key, long threshold, long interval, TimeUnit unit) {
   
    RScript rScript = redissonClient.getScript();
    long now = System.currentTimeMillis();
    long intervalMs = TimeUnit.MILLISECONDS.convert(interval, unit);
    
    return rScript.eval(RScript.Mode.READ_WRITE, slidingWindowScript, RScript.ReturnType.BOOLEAN,
            Collections.singletonList(key), threshold, now, intervalMs);
}

相关推荐

  1. SpringBoot集成Redisson实现

    2024-02-02 15:46:02       37 阅读
  2. Redisson实现

    2024-02-02 15:46:02       21 阅读
  3. SpringBoot整合resilience4j实现接口

    2024-02-02 15:46:02       40 阅读
  4. SpringBoot + Redis 实现接口,一个注解的事

    2024-02-02 15:46:02       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-02 15:46:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-02 15:46:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-02 15:46:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-02 15:46:02       18 阅读

热门阅读

  1. 读取超大文件的大小(20G),并切分的处理

    2024-02-02 15:46:02       26 阅读
  2. 前端常见面试题②

    2024-02-02 15:46:02       30 阅读
  3. Bat 脚本实现监测程序进而定时关机

    2024-02-02 15:46:02       35 阅读
  4. 手写Spring框架之: HelloSpring

    2024-02-02 15:46:02       34 阅读
  5. Activiti7 整合SpringBoot

    2024-02-02 15:46:02       26 阅读
  6. ✅Redis-管道技术

    2024-02-02 15:46:02       28 阅读
  7. centos gcc4.8升级8

    2024-02-02 15:46:02       35 阅读
  8. 云计算运维 · 第三阶段 · git

    2024-02-02 15:46:02       25 阅读