ratelimit

package
v0.1.27 Latest Latest
Warning

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

Go to latest
Published: Apr 17, 2025 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrTooManyRequests 表示请求超过了限流阈值
	ErrTooManyRequests = errors.New("too many requests")
)

Functions

func CombinedKeyExtractor

func CombinedKeyExtractor(extractors ...func(*mist.Context) string) func(*mist.Context) string

CombinedKeyExtractor 组合多个键提取器的结果

func IPInRangeKeyExtractor

func IPInRangeKeyExtractor(networks []*net.IPNet) func(*mist.Context) string

IPInRangeKeyExtractor 基于IP范围的键提取器

func IPKeyExtractor

func IPKeyExtractor(ctx *mist.Context) string

IPKeyExtractor 基于客户端IP的键提取器

func New

func New(limiter Limiter, options ...func(*Config)) mist.Middleware

New 创建一个新的限流中间件

func ParseIPNetwork

func ParseIPNetwork(cidr string) (*net.IPNet, error)

ParseIPNetwork 将CIDR字符串解析为IP网络

func PathKeyExtractor

func PathKeyExtractor(ctx *mist.Context) string

PathKeyExtractor 基于请求路径的键提取器

func UserIDKeyExtractor

func UserIDKeyExtractor(ctx *mist.Context) string

UserIDKeyExtractor 基于用户ID的键提取器

func WithBurst

func WithBurst(b int) func(*Config)

WithBurst 设置突发请求数量

func WithErrorHandler

func WithErrorHandler(fn func(*mist.Context, error)) func(*Config)

WithErrorHandler 设置错误处理器

func WithKeyExtractor

func WithKeyExtractor(fn func(*mist.Context) string) func(*Config)

WithKeyExtractor 设置键提取器

func WithRate

func WithRate(r float64) func(*Config)

WithRate 设置限流速率

func WithWhitelist

func WithWhitelist(whitelist []string) func(*Config)

WithWhitelist 设置白名单

Types

type Config

type Config struct {
	// 每秒允许的请求数
	Rate float64
	// 允许的突发请求数
	Burst int
	// 键提取器,从Context中提取限流键
	KeyExtractor func(*mist.Context) string
	// 自定义错误处理
	ErrorHandler func(*mist.Context, error)
	// 启用客户端IP限流
	EnableIPRateLimit bool
	// 使用真实IP(X-Forwarded-For或X-Real-IP)
	UseRealIP bool
	// 限流白名单,这些键不会被限流
	Whitelist []string
}

Config 限流配置

type Limiter

type Limiter interface {
	// Allow 检查特定键是否允许通过限流
	Allow(key string) (bool, error)
	// Reset 重置特定键的限流状态
	Reset(key string) error
}

Limiter 接口定义了限流器的基本操作

func NewMemoryLimiter

func NewMemoryLimiter(r float64, b int) Limiter

NewMemoryLimiter 创建一个基于内存的限流器

type RedisLimiter

type RedisLimiter interface {
	Limiter
	// 设置键的过期时间
	SetExpiry(key string, ttl time.Duration) error
	// 使用的Redis键前缀
	Prefix() string
}

RedisLimiter 使用Redis作为存储后端的限流器接口 这仅是接口定义,实际实现可以根据具体Redis客户端库实现

Jump to

Keyboard shortcuts

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