redis

package
v2.4.0-beta.3 Latest Latest
Warning

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

Go to latest
Published: Oct 16, 2025 License: Apache-2.0 Imports: 16 Imported by: 1

Documentation

Index

Constants

View Source
const (
	TTL                    int    = 300
	Scope                  string = "https://www.googleapis.com/auth/cloud-platform"
	PrefixServicesAccounts string = "projects/-/serviceAccounts/"
	ModeStandalone         Mode   = "standalone"
	ModeSentinel           Mode   = "sentinel"
	ModeCluster            Mode   = "cluster"
)

Variables

View Source
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 Mode

type Mode string

Mode define the Redis connection mode supported

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

func (rl *RedisLimiter) Allow(ctx context.Context, key string) (*ratelimit.Result, error)

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

Jump to

Keyboard shortcuts

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