Skip to content

Rate Limit Module

Rate limiting algorithms with memory exhaustion protection.

What's Included

  • Fixed Window — simple counter-based limiting
  • Sliding Window — smoother rate limiting
  • Token Bucket — burst-friendly limiting
  • Memory exhaustion protection with LRU eviction
  • HTTP middleware

Quick Copy

bash
cp -r registry/ratelimit/src/go/* yourproject/internal/ratelimit/

Usage

Fixed Window

go
limiter := ratelimit.NewFixedWindow(100, time.Minute)
handler := ratelimit.Middleware(limiter)(handler)

Sliding Window

go
limiter := ratelimit.NewSlidingWindow(100, time.Minute)
handler := ratelimit.Middleware(limiter)(handler)

Token Bucket

go
limiter := ratelimit.NewTokenBucket(100, 10) // 100 tokens/sec, burst 10
handler := ratelimit.Middleware(limiter)(handler)

Custom Key Function

go
handler := ratelimit.Middleware(limiter, ratelimit.WithKeyFunc(func(r *http.Request) string {
    return r.Header.Get("X-API-Key")
}))(handler)

Configuration

ParameterDescriptionDefault
maxRequestsMaximum requests per windowRequired
windowTime window durationRequired
burstBurst capacity (token bucket)Required
maxBucketsMaximum tracked keys10000

File Reference

FilePurpose
fixed_window.goFixed window algorithm
sliding_window.goSliding window algorithm
token_bucket.goToken bucket algorithm
store.goIn-memory store with LRU eviction
middleware.goHTTP middleware

Security Features

  • Memory exhaustion protection with max buckets
  • LRU eviction when limit reached
  • Key length limit prevents abuse

Tests

bash
cd registry/ratelimit/src/go
go test -v ./...

Released under the MIT License.