Rate Limiting con Redis

Protege tus APIs contra abuso implementando rate limiting con Redis.

import redis
import time

r = redis.Redis()

def is_rate_limited(user_id, limit=100, window=3600): key = f"rate:{user_id}" pipe = r.pipeline() now = time.time() pipe.zremrangebyscore(key, 0, now - window) pipe.zadd(key, {str(now): now}) pipe.zcard(key) pipe.expire(key, window) results = pipe.execute() return results[2] > limit

Algoritmos

  • Fixed Window: Simple pero puede tener edge cases
  • Sliding Window: Más preciso, usa sorted sets
  • Token Bucket: Permite bursts controlados