0Pricing
Lua Academy · Lección

Limitación de frecuencia con Lua

Implemente limitadores de frecuencia de ventana deslizante de forma atómica en Redis Lua.

Limitación de frecuencia con Lua es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

¿Por qué Redis para limitar la velocidad?

Redis proporciona operaciones atómicas, velocidad gracias a la memoria y un estado compartido entre varios servidores de aplicaciones, lo que lo convierte en una opción ideal para limitar la velocidad de forma distribuida.

Contador de ventana fija sencillo

Cuente las solicitudes de cada ventana de tiempo mediante INCR y EXPIRE.

EVAL "
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local count = redis.call('INCR', key)
if count == 1 then
  redis.call('EXPIRE', key, window)
end
if count > limit then
  return 0  -- rejected
end
return 1  -- allowed
" 1 rate:user:123 100 60

Ventana deslizante con conjuntos ordenados

Un limitador de velocidad más preciso utiliza un conjunto ordenado indexado por marcas de tiempo. Elimine las entradas antiguas, añada la solicitud actual y cuente el tamaño del conjunto.

EVAL "
local key = KEYS[1]
local now = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local limit = tonumber(ARGV[3])
redis.call('ZREMRANGEBYSCORE', key, 0, now - window * 1000)
redis.call('ZADD', key, now, now .. math.random())
redis.call('EXPIRE', key, window)
local count = redis.call('ZCARD', key)
if count > limit then return 0 end
return 1
" 1 slidingRate:user:123 1706000000000 60 100

Algoritmo de cubeta de tokens

Una cubeta de tokens permite ráfagas de solicitudes y mantiene una tasa media. Reponga los tokens con el tiempo; cada solicitud consume un token.

Algoritmo de cubeta con fugas

La cubeta con fugas impone una tasa constante estricta. Las solicitudes se ponen en cola (la cubeta) y se procesan a una tasa de drenaje fija. Las solicitudes que superan la capacidad se rechazan.

Límites por usuario y por IP

Identifique el limitador de velocidad mediante el ID de usuario, la clave de API o la dirección IP: rate:{userId}, rate:{ip}, rate:{apiKey}.

Límites de velocidad por niveles

Aplique límites distintos según el nivel del usuario (gratuito o pro). Compruebe el nivel del usuario antes de elegir qué límite aplicar.

EVAL "
local tier = redis.call('HGET', 'user:tier', ARGV[1])
local limit = tier == 'pro' and 10000 or 1000
-- ... rest of rate limit check
" 0 "userId123"

Devolución de encabezados

Devuelva desde el script el número de solicitudes restantes y la hora de restablecimiento para que la aplicación pueda establecer los encabezados X-RateLimit en la respuesta HTTP.

return {allowed, limit - count, resetTime}

Garantía de atomicidad distribuida

Dado que toda la comprobación del límite de velocidad se encuentra en un único script EVAL, es atómica en todas las instancias de servidores de aplicaciones que comparten el clúster de Redis.

Nota sobre Redis Cluster

En el modo Redis Cluster, todas las KEYS utilizadas en un script deben aplicar hash a la misma ranura. Utilice etiquetas hash: rate:{user123}:requests para forzar su colocación conjunta.

Supervisión de los límites de velocidad

Registre las solicitudes rechazadas junto con la información del usuario o la IP. Configure alertas cuando aumenten considerablemente las tasas de rechazo (lo que indica un ataque o una configuración incorrecta).

Pregunta sobre limitación de velocidad

¿Por qué es mejor un script de Lua de Redis para limitar la velocidad que utilizar contadores en el lado de la aplicación?

Repaso: limitación de velocidad con Lua

Implemente limitadores de velocidad en Lua de Redis mediante INCR+EXPIRE (ventana fija) o conjuntos ordenados (ventana deslizante). El script atómico garantiza la corrección entre servidores de aplicaciones distribuidos. Devuelva la cuota restante para los encabezados HTTP.

Preguntas frecuentes

¿La lección «Limitación de frecuencia con Lua» es gratis?

Sí — el texto completo de «Limitación de frecuencia con Lua» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Limitación de frecuencia con Lua»?

Implemente limitadores de frecuencia de ventana deslizante de forma atómica en Redis Lua. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Limitación de frecuencia con Lua»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. EVAL y el entorno Lua de Redis
  2. Operaciones atómicas y transacciones
  3. Limitación de frecuencia con Lua
  4. SCRIPT LOAD y EVALSHA
← Volver a Lua Academy