kredis

package
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Feb 19, 2022 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotObtained is returned when a lock cannot be obtained.
	ErrNotObtained = errors.New("redislock: not obtained")

	// ErrLockNotHeld is returned when trying to release an inactive lock.
	ErrLockNotHeld = errors.New("redislock: lock not held")
)

Functions

This section is empty.

Types

type Cache

type Cache struct {
	*redis.Client
	Logger baselogger.Logger
}

RedisStub is an unit that handles master and slave.

func New

func New(opts ...*Option) (*Cache, error)

type Lock

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

Lock represents an obtained, distributed lock.

func Obtain

func Obtain(client *Cache, key string, ttl time.Duration, opt *option) (*Lock, error)

Obtain is a short-cut for New(...).Obtain(...).

func (*Lock) Key

func (l *Lock) Key() string

Key returns the redis key used by the lock.

func (*Lock) Metadata

func (l *Lock) Metadata() string

Metadata returns the metadata of the lock.

func (*Lock) Refresh

func (l *Lock) Refresh(ttl time.Duration, opt *option) error

Refresh extends the lock with a new TTL. May return ErrNotObtained if refresh is unsuccessful.

func (*Lock) Release

func (l *Lock) Release() error

Release manually releases the lock. May return ErrLockNotHeld.

func (*Lock) TTL

func (l *Lock) TTL() (time.Duration, error)

TTL returns the remaining time-to-live. Returns 0 if the lock has expired.

func (*Lock) Token

func (l *Lock) Token() string

Token returns the token value set by the lock.

type LockClient

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

LockClient wraps a redis client.

func NewLockClient

func NewLockClient(client *Cache) *LockClient

New creates a new LockClient instance with a custom namespace.

func (*LockClient) Obtain

func (c *LockClient) Obtain(key string, ttl time.Duration, opt *option) (*Lock, error)

Obtain tries to obtain a new lock using a key with the given TTL. May return ErrNotObtained if not successful.

type Option

type Option struct {
	// Addr 节点连接地址
	Addr string
	// Password 密码
	Password string
	// DB,默认为0, 一般应用不推荐使用DB分片
	DB int
	// PoolSize 集群内每个节点的最大连接池限制 默认每个CPU10个连接
	PoolSize int
	// MaxRedirects 网络相关的错误最大重试次数 默认8次
	MaxRetries int
	// MinIdleConns 最小空闲连接数
	MinIdleConns int
	// DialTimeout 拨超时时间
	DialTimeout string
	// ReadTimeout 读超时 默认3s
	ReadTimeout string
	// WriteTimeout 读超时 默认3s
	WriteTimeout string
	// IdleTimeout 连接最大空闲时间,默认60s, 超过该时间,连接会被主动关闭
	IdleTimeout string
	Logger      baselogger.Logger
}

func ConfigOption

func ConfigOption(key string) (option *Option, err error)

RawConfig ...

func NewOption

func NewOption() *Option

func SetAddr

func SetAddr(l string) *Option

func SetDB

func SetDB(l int) *Option

func SetDialTimeout

func SetDialTimeout(l string) *Option

func SetIdleTimeout

func SetIdleTimeout(l string) *Option

func SetLogger

func SetLogger(l baselogger.Logger) *Option

func SetMaxRetries

func SetMaxRetries(l int) *Option

func SetMinIdleConns

func SetMinIdleConns(l int) *Option

func SetPassword

func SetPassword(l string) *Option

func SetPoolSize

func SetPoolSize(l int) *Option

func SetReadTimeout

func SetReadTimeout(l string) *Option

func SetWriteTimeout

func SetWriteTimeout(l string) *Option

func (*Option) MergeOption

func (c *Option) MergeOption(opts ...*Option) *Option

func (*Option) SetAddr

func (c *Option) SetAddr(l string) *Option

func (*Option) SetDB

func (c *Option) SetDB(l int) *Option

func (*Option) SetDialTimeout

func (c *Option) SetDialTimeout(l string) *Option

func (*Option) SetIdleTimeout

func (c *Option) SetIdleTimeout(l string) *Option

func (*Option) SetLogger

func (c *Option) SetLogger(l baselogger.Logger) *Option

func (*Option) SetMaxRetries

func (c *Option) SetMaxRetries(l int) *Option

func (*Option) SetMinIdleConns

func (c *Option) SetMinIdleConns(l int) *Option

func (*Option) SetPassword

func (c *Option) SetPassword(l string) *Option

func (*Option) SetPoolSize

func (c *Option) SetPoolSize(l int) *Option

func (*Option) SetReadTimeout

func (c *Option) SetReadTimeout(l string) *Option

func (*Option) SetWriteTimeout

func (c *Option) SetWriteTimeout(l string) *Option

type RetryStrategy

type RetryStrategy interface {
	// NextBackoff returns the next backoff duration.
	NextBackoff() time.Duration
}

RetryStrategy allows to customise the lock retry strategy.

func ExponentialBackoff

func ExponentialBackoff(min, max time.Duration) RetryStrategy

ExponentialBackoff strategy is an optimization strategy with a retry time of 2**n milliseconds (n means number of times). You can set a minimum and maximum value, the recommended minimum value is not less than 16ms.

func LimitRetry

func LimitRetry(s RetryStrategy, max int) RetryStrategy

LimitRetry limits the number of retries to max attempts.

func LinearBackoff

func LinearBackoff(backoff time.Duration) RetryStrategy

LinearBackoff allows retries regularly with customized intervals

func NoRetry

func NoRetry() RetryStrategy

NoRetry acquire the lock only once.

Jump to

Keyboard shortcuts

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