hotgo/server/internal/library/hgrds/lock/consts.go

60 lines
1.3 KiB
Go

// Package lock
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package lock
import (
"github.com/gogf/gf/v2/errors/gerror"
"time"
)
const (
// 加锁脚本
lockScript = `
local token = redis.call('get', KEYS[1])
if token then
return 0
else
local setResult = redis.call('setex', KEYS[1], ARGV[2], ARGV[1])
return setResult
end
`
// 续约脚本
renewalScript = `
if redis.call('get',KEYS[1])==ARGV[2] then
return redis.call('expire',KEYS[1],ARGV[1])
end
return 0
`
// 解锁脚本
unlockScript = `
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 2
end
`
)
const (
// DefaultTTL 锁默认过期时间
DefaultTTL = time.Second * 10
// DefaultTryLockInterval 默认重试获取锁间隔时间
DefaultTryLockInterval = time.Millisecond * 100
)
var (
// ErrLockFailed 加锁失败
ErrLockFailed = gerror.New("lock failed")
// ErrTimeout 加锁超时
ErrTimeout = gerror.New("timeout")
// ErrNotCaller 锁持有者不是当前实例
ErrNotCaller = gerror.New("lock not held by the caller")
// ErrNotExist 锁不存在
ErrNotExist = gerror.New("lock does not exist")
)