ratelimit

package
v0.35.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 29, 2025 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Middleware

func Middleware(config Config, limiter Limiter) gin.HandlerFunc

Middleware 创建速率限制中间件

func PerEndpointMiddleware

func PerEndpointMiddleware(config Config, limiter Limiter) gin.HandlerFunc

PerEndpointMiddleware 基于端点的速率限制

func PerUserMiddleware

func PerUserMiddleware(config Config, limiter Limiter) gin.HandlerFunc

PerUserMiddleware 基于用户的速率限制

Types

type Config

type Config struct {
	Enabled       bool
	RequestsPerIP int                       // 每个 IP 的请求限制
	WindowSize    time.Duration             // 时间窗口
	BurstSize     int                       // 突发大小(令牌桶容量)
	KeyFunc       func(*gin.Context) string // 自定义 key 提取函数
	Algorithm     string                    // 算法:token_bucket 或 sliding_window
}

Config 速率限制配置

type LimitInfo

type LimitInfo struct {
	Limit     int       // 限制数量
	Remaining int       // 剩余数量
	ResetAt   time.Time // 重置时间
}

LimitInfo 限制信息

type Limiter

type Limiter interface {
	// Allow 检查是否允许请求
	Allow(key string) bool

	// Reset 重置指定 key 的限制
	Reset(key string)

	// GetInfo 获取限制信息
	GetInfo(key string) *LimitInfo
}

Limiter 速率限制器接口

func NewLimiterFromConfig

func NewLimiterFromConfig(config Config) Limiter

NewLimiterFromConfig 从配置创建限流器

type SlidingWindowLimiter

type SlidingWindowLimiter struct {
	// contains filtered or unexported fields
}

SlidingWindowLimiter 滑动窗口限流器

func NewSlidingWindowLimiter

func NewSlidingWindowLimiter(limit int, windowDuration time.Duration) *SlidingWindowLimiter

NewSlidingWindowLimiter 创建滑动窗口限流器

func (*SlidingWindowLimiter) Allow

func (l *SlidingWindowLimiter) Allow(key string) bool

Allow 检查是否允许请求

func (*SlidingWindowLimiter) GetInfo

func (l *SlidingWindowLimiter) GetInfo(key string) *LimitInfo

GetInfo 获取限制信息

func (*SlidingWindowLimiter) Reset

func (l *SlidingWindowLimiter) Reset(key string)

Reset 重置指定 key 的限制

type TokenBucketLimiter

type TokenBucketLimiter struct {
	// contains filtered or unexported fields
}

TokenBucketLimiter 令牌桶限流器

func NewTokenBucketLimiter

func NewTokenBucketLimiter(rate, capacity int, window time.Duration) *TokenBucketLimiter

NewTokenBucketLimiter 创建令牌桶限流器

func (*TokenBucketLimiter) Allow

func (l *TokenBucketLimiter) Allow(key string) bool

Allow 检查是否允许请求

func (*TokenBucketLimiter) GetInfo

func (l *TokenBucketLimiter) GetInfo(key string) *LimitInfo

GetInfo 获取限制信息

func (*TokenBucketLimiter) Reset

func (l *TokenBucketLimiter) Reset(key string)

Reset 重置指定 key 的限制

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL