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