限流器

Lua 脚本

  1. local current
  2. current = redis.call("incr",KEYS[1])
  3. if tonumber(current) == 1 then
  4. redis.call("expire",KEYS[1],1)
  5. end

列表结构

使用 Redis 的列表结构来代替 INCR 命令,这个方法无须脚本支持

  1. FUNCTION LIMIT_API_CALL(ip)
  2. current = LLEN(ip)
  3. IF current > 10 THEN
  4. ERROR "too many requests per second"
  5. ELSE
  6. IF EXISTS(ip) == FALSE
  7. MULTI
  8. RPUSH(ip,ip)
  9. EXPIRE(ip,1)
  10. EXEC
  11. ELSE
  12. RPUSHX(ip,ip)
  13. END
  14. PERFORM_API_CALL()
  15. END

日活统计 BitMap