locker

package
v1.3.0 Latest Latest
Warning

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

Go to latest
Published: Jun 18, 2026 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrLockAcquired = errors.New("lock is already acquired")
	ErrLockNotHeld  = errors.New("lock is not held")
	ErrInvalidToken = errors.New("invalid token")
)

错误定义

Functions

func GenerateToken

func GenerateToken() string

GenerateToken 生成唯一的随机令牌

Types

type Lock

type Lock interface {
	// Key 获取锁的 key
	Key() string

	// Token 获取锁的唯一令牌(用于安全释放)
	Token() string

	// Unlock 释放锁
	Unlock(ctx context.Context) error

	// Extend 延长锁的过期时间
	Extend(ctx context.Context, ttl time.Duration) error
}

Lock 单个锁实例接口

type LockOption

type LockOption func(*LockOptions)

LockOption 锁选项函数类型

func WithTTL

func WithTTL(ttl time.Duration) LockOption

WithTTL 设置锁的过期时间

func WithWatchDog

func WithWatchDog() LockOption

WithWatchDog 启用看门狗自动续期

type LockOptions

type LockOptions struct {
	TTL      time.Duration // 锁过期时间
	WatchDog bool          // 是否启用看门狗自动续期
}

LockOptions 锁配置选项

func DefaultLockOptions

func DefaultLockOptions() *LockOptions

DefaultLockOptions 默认选项

type Locker

type Locker interface {
	// Lock 获取锁,返回锁对象和错误
	Lock(ctx context.Context, key string, opts ...LockOption) (Lock, error)

	// Unlock 释放锁(根据 key)
	Unlock(ctx context.Context, key string) error

	// Extend 延长锁的过期时间
	Extend(ctx context.Context, key string, ttl time.Duration) error
}

Locker 分布式锁接口

type RedisLocker

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

RedisLocker 基于 Redis 的分布式锁实现

func NewRedisLocker

func NewRedisLocker(client *redis.Client) *RedisLocker

NewRedisLocker 创建 Redis 分布式锁实例

func (*RedisLocker) Extend

func (l *RedisLocker) Extend(ctx context.Context, key string, ttl time.Duration) error

Extend 延长锁的过期时间 注意:这种方式不安全,因为无法验证 token 建议使用 Lock 接口返回的 Lock 实例来延长

func (*RedisLocker) Lock

func (l *RedisLocker) Lock(ctx context.Context, key string, opts ...LockOption) (Lock, error)

Lock 获取分布式锁

func (*RedisLocker) Unlock

func (l *RedisLocker) Unlock(ctx context.Context, key string) error

Unlock 释放锁(根据 key) 注意:这种方式不安全,因为无法验证 token 建议使用 Lock 接口返回的 Lock 实例来释放

Jump to

Keyboard shortcuts

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