limit_rate

package
v1.8.3 Latest Latest
Warning

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

Go to latest
Published: Jul 9, 2026 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ConcurrencyLimiter

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

func NewConcurrencyLimiter

func NewConcurrencyLimiter(redisKey string, connThreshold int64, ttl int64) *ConcurrencyLimiter

func (*ConcurrencyLimiter) ConnAcquire

func (l *ConcurrencyLimiter) ConnAcquire(agent *RedisLRAgent) (bool, int64, int64, error)

func (*ConcurrencyLimiter) ConnRelease

func (l *ConcurrencyLimiter) ConnRelease(agent *RedisLRAgent) (int64, error)

func (*ConcurrencyLimiter) UpdateArgs

func (l *ConcurrencyLimiter) UpdateArgs(connThreshold int64)

type QPMLimiter

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

func NewQPMLimiter

func NewQPMLimiter(redisKey string, burst int64, period int64, limit int64) *QPMLimiter

func (*QPMLimiter) Check

func (l *QPMLimiter) Check(reqToConsume int64, agent *RedisLRAgent) (bool, int64, float64, error)

func (*QPMLimiter) UpdateArgs

func (l *QPMLimiter) UpdateArgs(burst int64, period int64, limit int64)

type RedisLRAgent

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

func NewRedisLRAgent

func NewRedisLRAgent(redisClient redis_client.Client) *RedisLRAgent

func (*RedisLRAgent) CheckAndConsumeToken

func (agent *RedisLRAgent) CheckAndConsumeToken(
	key string,
	tpmThreshold int64,
	windowSizeSec int64,
	bucketPeakLimit int64,
	bucketSizeSec int64,
	tokensToConsume int64,
) (currentTime int64, isBucketAllowed bool, isWholeAllowed bool,
	currentBucketRemaining int64, totalRemaining int64, isFinalAllowed bool, err error)

func (*RedisLRAgent) ConAcquire

func (agent *RedisLRAgent) ConAcquire(
	key string,
	conThreshold int64,
	ttl int64,
) (currentTime int64, isAllowed bool, curCount int64, err error)

func (*RedisLRAgent) ConRelease

func (agent *RedisLRAgent) ConRelease(
	key string,
	ttl int64,
) (curCount int64, err error)

func (*RedisLRAgent) QpmCheck

func (agent *RedisLRAgent) QpmCheck(
	key string,
	burst int64,
	period int64,
	limit int64,
	expectUse int64,
) (currentTime int64, isAllowed bool, tat float64, err error)

func (*RedisLRAgent) UpdateConsumeToken

func (agent *RedisLRAgent) UpdateConsumeToken(
	key string,
	bucketTime int64,
	bucketSizeSec int64,
	tokensToConsume int64,
) (newBucketValue int64, err error)

type TPMLimiter

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

each Window can seperate into buckets bucketcount == windowSizeSec/bucketSizeSec require: windowSizeSec % bucketSizeSec == 0

func NewTPMLimiter

func NewTPMLimiter(
	redisKey string,
	maxTokensPerWindow int64,
	windowSizeSec int64,
	maxTokensPerBucket int64,
	bucketSizeSec int64,
) *TPMLimiter

func (*TPMLimiter) TryCheck

func (l *TPMLimiter) TryCheck(tokensToConsume int64, agent *RedisLRAgent) (bool, int64, int64, error)

func (*TPMLimiter) UpdateArgs

func (l *TPMLimiter) UpdateArgs(maxTokensPerWindow int64,
	windowSizeSec int64,
	maxTokensPerBucket int64,
	bucketSizeSec int64)

func (*TPMLimiter) UpdateTokenUsage

func (l *TPMLimiter) UpdateTokenUsage(bucketTime int64, tokensConsumeDelta int64, agent *RedisLRAgent) error

Jump to

Keyboard shortcuts

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