Lua Academy · Aula

Limitação de taxa com Lua

Implemente limitadores de taxa de janela deslizante atomicamente no Redis Lua.

Aula 3 de 413 etapas

Limitação de taxa com Lua é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Por que usar o Redis para limitação de taxa?

O Redis oferece operações atômicas, velocidade em memória e estado compartilhado entre vários servidores de aplicação — o que o torna ideal para limitação distribuída de taxa.

Contador simples de janela fixa

Conte as requisições por janela de tempo usando INCR e 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

Janela deslizante com conjuntos ordenados

Um limitador de taxa mais preciso usa um conjunto ordenado indexado por carimbos de data/hora. Remova as entradas antigas, adicione a requisição atual e conte o tamanho do 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 do balde de tokens

Um balde de tokens permite picos de tráfego mantendo uma taxa média. Reabasteça os tokens ao longo do tempo; cada requisição consome um token.

Algoritmo do balde com vazamento

O balde com vazamento impõe uma taxa constante rigorosa. As requisições são enfileiradas (no balde) e processadas a uma taxa fixa de drenagem. O excesso é rejeitado.

Limites por usuário e por IP

Defina a chave do limitador de taxa pelo ID do usuário, pela chave de API ou pelo endereço IP: rate:{userId}, rate:{ip}, rate:{apiKey}.

Limites de taxa por nível

Aplique limites diferentes com base no nível do usuário (gratuito versus profissional). Verifique o nível do usuário antes de escolher qual limite 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"

Retorno de cabeçalhos

Retorne a contagem de requisições restantes e o tempo de redefinição do script, para que a aplicação possa definir os cabeçalhos X-RateLimit na resposta HTTP.

return {allowed, limit - count, resetTime}

Garantia atômica distribuída

Como toda a verificação do limite de taxa está em um único script EVAL, ela é atômica entre todas as instâncias dos servidores de aplicação que compartilham o cluster Redis.

Observação sobre o cluster Redis

No modo Redis Cluster, todas as KEYS usadas em um script devem ser atribuídas ao mesmo slot de hash. Use tags de hash: rate:{user123}:requests para forçar a co-localização.

Monitoramento dos limites de taxa

Registre as requisições rejeitadas com informações do usuário/IP. Configure alertas quando as taxas de rejeição aumentarem repentinamente (o que indica um ataque ou uma configuração incorreta).

Pergunta sobre limitação de taxa

Por que um script Lua do Redis é melhor para limitação de taxa do que contadores no lado da aplicação?

Recapitulação: limitação de taxa com Lua

Implemente limitadores de taxa no Lua do Redis usando INCR+EXPIRE (janela fixa) ou conjuntos ordenados (janela deslizante). O script atômico garante a correção entre servidores de aplicação distribuídos. Retorne a cota restante para os cabeçalhos HTTP.

Grátis para começar

Aprenda Lua com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
40
Aulas
159

Perguntas Frequentes

A aula “Limitação de taxa com Lua” é grátis?

Sim — o texto completo de “Limitação de taxa com Lua” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Limitação de taxa com Lua”?

Implemente limitadores de taxa de janela deslizante atomicamente no Redis Lua. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Limitação de taxa com Lua”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. EVAL e ambiente Lua do Redis
  2. Operações atômicas e transações
  3. Limitação de taxa com Lua
  4. SCRIPT LOAD e EVALSHA
← Voltar para Lua Academy