Documentation
¶
Index ¶
Constants ¶
Variables ¶
var Factory = func(client redis.UniversalClient, config ratelimit.Config) ratelimit.Limiter { return NewRedisLimiter(client, config) }
Factory is a ready-to-use LimiterFactory for creating Redis-backed rate limiters. This is the standard factory that consumers should use to avoid boilerplate.
Example usage:
handler := ratelimit.NewGlobalHandler(&ratelimit.GlobalHandlerConfig{
// ... config
LimiterFactory: redis.Factory,
}, logger)
Functions ¶
This section is empty.
Types ¶
type RedisConnection ¶
type RedisConnection struct {
Mode Mode
Address []string
DB int
MasterName string
Password string
Protocol int
UseTLS bool
Logger log.Logger
Connected bool
Client redis.UniversalClient
CACert string
UseGCPIAMAuth bool
GoogleApplicationCredentials string
ServiceAccount string
TokenLifeTime time.Duration
RefreshDuration time.Duration
PoolSize int
MinIdleConns int
ReadTimeout time.Duration
WriteTimeout time.Duration
DialTimeout time.Duration
PoolTimeout time.Duration
MaxRetries int
MinRetryBackoff time.Duration
MaxRetryBackoff time.Duration
// contains filtered or unexported fields
}
RedisConnection represents a Redis connection hub
func (*RedisConnection) BuildTLSConfig ¶
func (rc *RedisConnection) BuildTLSConfig() (*tls.Config, error)
BuildTLSConfig generates a *tls.Config configuration using ca cert on base64
func (*RedisConnection) Close ¶
func (rc *RedisConnection) Close() error
Close closes the Redis connection
func (*RedisConnection) Connect ¶
func (rc *RedisConnection) Connect(ctx context.Context) error
Connect initializes a Redis connection
func (*RedisConnection) GetClient ¶
func (rc *RedisConnection) GetClient(ctx context.Context) (redis.UniversalClient, error)
GetClient always returns a pointer to a Redis client
func (*RedisConnection) InitVariables ¶
func (rc *RedisConnection) InitVariables()
InitVariables sets default values for RedisConnection
type RedisLimiter ¶ added in v2.4.0
type RedisLimiter struct {
// contains filtered or unexported fields
}
RedisLimiter implements distributed rate limiting using Redis. It uses sorted sets with sliding window algorithm for accurate rate limiting. This implementation is production-ready and can handle high-throughput scenarios.
func NewRedisLimiter ¶ added in v2.4.0
func NewRedisLimiter(client redis.UniversalClient, config ratelimit.Config) *RedisLimiter
NewRedisLimiter creates a new Redis-backed rate limiter. The client parameter accepts redis.UniversalClient which supports: - Standalone Redis - Redis Sentinel (high availability) - Redis Cluster (horizontal scaling)
func (*RedisLimiter) Allow ¶ added in v2.4.0
Allow implements sliding window rate limiting using Redis sorted sets. Algorithm: 1. Remove old entries outside the current time window 2. Count remaining entries in the window 3. Add current request with timestamp as score 4. Set expiration on the key for automatic cleanup
This approach provides: - Accurate rate limiting (no burst issues at window boundaries) - Automatic cleanup of old data - Atomic operations via Redis pipeline - Distributed consistency across multiple service instances
func (*RedisLimiter) GetConfig ¶ added in v2.4.0
func (rl *RedisLimiter) GetConfig() ratelimit.Config
GetConfig returns the limiter's configuration. This is used by middleware to populate response headers.
func (*RedisLimiter) Reset ¶ added in v2.4.0
func (rl *RedisLimiter) Reset(ctx context.Context, key string) error
Reset clears all rate limit data for a specific key. This is useful for: - Administrative overrides (clearing rate limits for specific users) - Testing scenarios - Implementing "forgiveness" logic after temporary blocks