Rate Limiting con Redis
Protege tus APIs contra abuso implementando rate limiting con Redis.
import redis
import timer = 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