
class SlidingWindowRateLimiter
    def initialize(user_id, rate, window_size)
        @rate = rate  # 请求速率限制（每秒的请求数）
        @window_size = window_size  # 时间窗口大小（秒）
        @redis = $redis_cache
        @key = "#{user_id}:SlidingWindow"
        @current_timestamp = Time.now.to_f
    end

    def allow_request
        current_timestamp = Time.now.to_f
        score = current_timestamp.to_i
        start_time = current_timestamp - @window_size

        @redis.zremrangebyscore(@key, '-inf', start_time)
        count = @redis.zcount(@key, '-inf', '+inf').to_i

        return false if count >= @rate

        @redis.zadd(@key, score, current_timestamp)
        true
    end
end


=begin
    #测试通过
    
    limiter = SlidingWindowRateLimiter.new(user_id,10, 1)  # 设置请求速率限制为10次/秒，时间窗口大小为1秒
    40.times do
        if limiter.allow_request
            puts "Allow"
        else
            puts "Reject"
        end
    end

=end