https://github.com/pixelbend/surgelimit-go
A flexible rate limiting package for Go.
https://github.com/pixelbend/surgelimit-go
consistent distributed dragonfly go keydb kvrocks leaky-bucket rate-limiter redis redis-cluster resilient valkey
Last synced: about 2 months ago
JSON representation
A flexible rate limiting package for Go.
- Host: GitHub
- URL: https://github.com/pixelbend/surgelimit-go
- Owner: pixelbend
- License: mit
- Created: 2024-07-28T15:38:58.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-02-24T00:24:56.000Z (3 months ago)
- Last Synced: 2025-02-24T01:25:10.693Z (3 months ago)
- Topics: consistent, distributed, dragonfly, go, keydb, kvrocks, leaky-bucket, rate-limiter, redis, redis-cluster, resilient, valkey
- Language: Go
- Homepage:
- Size: 63.5 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SurgeLimit Go
SurgeLimit Go is a flexible and efficient rate limiting package for Go, designed to work with a variety of caching systems, including Redis, RedisCluster, ValKey, KeyDB, DragonflyDB, and Kvrocks. It implements a leaky bucket algorithm to help you control the rate of requests and manage traffic surges effectively.
## Features
- **Leaky Bucket Algorithm**: Implements the leaky bucket rate limiting algorithm, which smooths out bursts of traffic by allowing a fixed rate of requests and handling excess traffic gracefully.
- **Multi-System Support**: Compatible with multiple Redis compatible systems, providing flexibility to integrate with your existing infrastructure.
- **High Performance**: Designed for high performance and low latency, making it suitable for high-throughput applications.
- **Configurable Limits**: Easily configure rate limits based on your application's needs, including maximum request rates and burst capacities.
- **Redis Integration**: Fully integrated with popular Redis-based systems, offering robust support for distributed environments.
## Installation
To install SurgeLimit Go, use the following command.
```bash
go get github.com/pixelbend/surgelimit-go
```## Usage
Here's a basic example of how to use SurgeLimit Go.
```go
package mainimport (
"context"
"fmt"
"log""github.com/pixelbend/surgelimit-go/leakybucket"
"github.com/go-redis/redis/v9"
)func main() {
// Initialize Redis client
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
})// Flush the Redis database to start with a clean state
if err := rdb.FlushDB(context.Background()).Err(); err != nil {
log.Fatalf("Error flushing DB: %v", err)
}// Create a new leaky bucket rate limiter with default options
limiter := leakybucket.NewLimiter(rdb, leakybucket.DefaultOptions())// Attempt to allow a request under the rate limit
res, err := limiter.Allow(context.Background(), "project:01J61AAPTXV3HQD95XQWATPBS8", leakybucket.LimitPerSecond(10))
if err != nil {
log.Fatalf("Error checking rate limit: %v", err)
}// Check if the request is allowed
if res.Allowed > 0 {
// If allowed, proceed with the application logic
log.Println("Request allowed, proceeding with application logic...")
} else {
// If not allowed, handle the rate limit exceeded case
log.Println("Request denied: rate limit exceeded")
}
}
```