locker

package
v0.5.7 Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2024 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const UnlockScript = `
	if redis.call("GET", KEYS[1]) == ARGV[1] then
		return redis.call("DEL", KEYS[1])
	else
		return 0
	end
`

UnlockScript 释放锁脚本

Variables

View Source
var (
	ErrInvalidRedisAdapterParams = errors.New("invalid redis adapter params")
	ErrInvalidDefaultName        = errors.New("invalid default name")

	ErrAdapterUndefined     = errors.New("undefined adapter")
	ErrAdapterUninitialized = errors.New("uninitialized adapter")
)

Functions

func Init

func Init(conf []Config, defaultAdapter string) error

Init 初始化设置,在框架初始化时调用

func LockFunc

func LockFunc(ctx context.Context, ttl uint64, fn func() any) (any, error)

LockFunc 启用分布式锁执行fn ttl 生存时间 (秒) f 返回interface{} 的函数 在获取锁失败或超时的情况下,fn不会被执行

Types

type Config added in v0.2.23

type Config struct {
	Name    string            `json:"name" toml:"name"`
	Adapter string            `json:"adapter" toml:"adapter"`
	Option  map[string]string `json:"option" toml:"option"`
}

type Locker

type Locker interface {

	// Lock 分布式自旋锁
	// resource 资源标识,相同的资源标识会互斥
	// ttl 生存时间 (秒)
	Lock(ctx context.Context, resource string, ttl uint64) (Releaser, error)

	// TryLock 尝试获取锁
	// resource 资源标识,相同的资源标识会互斥
	// ttl 生存时间 (秒)
	TryLock(resource string, ttl uint64) (Releaser, bool, error)

	// LockFunc 分布式自旋锁执行fn
	// resource 资源标识,相同的资源标识会互斥
	// ttl 生存时间 (秒)
	// f 返回interface{} 的函数
	// 在获取锁失败或超时的情况下,fn不会被执行
	LockFunc(ctx context.Context, ttl uint64, fn func() any) (any, error)
}

func Instance added in v0.2.23

func Instance(name string) (Locker, error)

Instance 获取分布式锁实例

type Manager added in v0.2.23

type Manager struct {
	sync.Map
	// contains filtered or unexported fields
}

type Releaser added in v0.2.23

type Releaser interface {
	Release() error
}

func Lock added in v0.2.23

func Lock(ctx context.Context, resource string, ttl uint64) (Releaser, error)

Lock 分布式自旋锁

func TryLock

func TryLock(resource string, ttl uint64) (Releaser, bool, error)

TryLock 尝试获取锁 resource 资源标识,相同的资源标识会互斥 ttl 生存时间 (秒)

Jump to

Keyboard shortcuts

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