distributed

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: May 30, 2022 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Overview

************************* * * distlock 基于redis的分布式锁组件 * *************************

Index

Constants

View Source
const (
	ErrNotInit           = "ErrNotInit"           //包未初始化,需先执行Init方法
	ErrParams            = "ErrParams"            //参数有误
	ErrRedis             = "ErrRedis"             //redis底层错误
	ErrTryLockFailed     = "ErrTryLockFailed"     //锁被占用,非阻塞式获取锁失败
	ErrLockTimeout       = "ErrLockTimeout"       //锁被占用,上锁超时
	ErrUnlockNotAcquired = "ErrUnlockNotAcquired" //释放失败,这可能是未获取锁或者锁已超时被自动释放
)
View Source
const (
	DistLockPrefix = "DIST_LOCK_" //redis key 前缀
)

Variables

This section is empty.

Functions

func ErrorCode

func ErrorCode(err error) string

ErrorCode 解析错误码

func ErrorMsg

func ErrorMsg(err error) string

ErrorCode 解析错误内容

func Init

func Init(cache *redis.Cache) (err error)

Init 初始化

  • cache redis缓存对象
  • err.Code
  • ErrParams 参数有误(nil)

func InitWithArgs

func InitWithArgs(cache *redis.Cache, lockDelay time.Duration) (err error)

Init 初始化

  • cache redis缓存对象
  • lockDelay 上锁时两次尝试上锁之间的时间间隔(ns)
  • err.Code
  • ErrParams 参数有误(nil)

func Lock

func Lock(resourceID string, waitTimeout, lockTimeout time.Duration) (lockedID string, err error)

Lock 获取锁

  • resourceID 本次期望上锁的资源
  • waitTimeout 获取锁操作最长等待时间,超时返回错误
  • lockTimeout 锁超时时间,超过将自动释放锁
  • lockedID 资源标记,释放锁时需要根据lockedID释放
  • err.Code
  • ErrNotInit 包没有初始化,需先调用Init
  • ErrRedis redis底层错误
  • ErrParams 参数有误
  • ErrLockTimeout 锁被占用,上锁超时

func QueryLock

func QueryLock(resourceID string, lockedID string) (acquired bool, err error)

QueryLock 查询是标记是否有效

  • resourceID 本次查询的资源
  • lockedID 获取锁时返回的资源标记
  • acquired 当前是否仍持有锁
  • err.Code
  • ErrNotInit 包没有初始化,需先调用Init
  • ErrRedis redis底层错误

func TryLock

func TryLock(resourceID string, lockTimeout time.Duration) (lockedID string, err error)

TryLock 非阻塞式获取锁

  • resourceID 本次期望上锁的资源
  • lockTimeout 锁超时时间,超过将自动释放锁
  • lockedID 资源标记,释放锁时需要根据lockedID释放
  • err.Code
  • ErrNotInit 包没有初始化,需先调用Init
  • ErrRedis redis底层错误
  • ErrParams 参数有误
  • ErrTryLockFailed 锁被占用,上锁失败

func UnLock

func UnLock(resourceID string, lockedID string) error

UnLock 释放锁

  • resourceID 本次期望释放的资源
  • lockedID 资源标记,由上锁操作时返回。如果资源仍由当前节点持有,释放成功,否则失败
  • err.Code
  • ErrNotInit 包没有初始化,需先调用Init
  • ErrRedis redis底层错误
  • ErrUnlockNotAcquired 当前未持有锁,释放失败,这可能是因为锁过期了

Types

type LockError

type LockError struct {
	Code string
	Msg  string
}

func (*LockError) Error

func (err *LockError) Error() string

Jump to

Keyboard shortcuts

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