【限流算法】java实现redis分布式时间窗口计数器算法

本文实现一种基于java的分布式固定时间窗口计数器算法

//每次请求进来,查询一下当前的计数值,如果超出请求数阈值,则拒绝请求,返回系统繁忙提示
private long limitFlow(String key) {
        //Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。设置成功返回1,设置失败返回0
        Long lng = redisCacheClient.setnx(jedisGroup, key, "1");
        if (lng == 1) {
            //设置时间窗口,redis-key时效为10秒
            redisCacheClient.expire(jedisGroup, key, 10);
            return 1L;
        } else {
            //Redis Incrby 命令将 key 中储存的数字加上指定的增量值。相当于放在redis中的计数器,每次请求到来计数器自增1
            long val = redisCacheClient.incrBy(jedisGroup, key, 1);
  
            return val;
        }
    }

 

你可能感兴趣的:(redis,java,算法,redis,分布式限流,固定时间窗口)