goRedisDLM/redisLock/option.go

72 lines
1.3 KiB
Go

package redisLock
const (
DEFAULTMAXWAITSECOND = 5
DEFAULTMAXEXPIRESECOND = 30
)
type RedisLockOptions struct {
isBlock bool
maxWaitSecond int
expireSecond int
isReNew bool
}
func (r *RedisLockOptions) repairOption() {
//if r.isBlock && r.maxWaitSecond <= 0 {
// r.maxWaitSecond = DEFAULTMAXWAITSECOND
//}
if r.expireSecond > 0 {
return
}
r.expireSecond = DEFAULTMAXEXPIRESECOND
r.isReNew = true
}
type RedisLockOption func(*RedisLockOptions)
func WithBlock() RedisLockOption {
return func(o *RedisLockOptions) {
o.isBlock = true
}
}
func WithMaxWaitTime(maxWaitTime int) RedisLockOption {
return func(o *RedisLockOptions) {
o.maxWaitSecond = maxWaitTime
}
}
func WithExpireTime(expireTime int) RedisLockOption {
return func(o *RedisLockOptions) {
o.expireSecond = expireTime
}
}
type RedLockOptions struct {
perHostTimeout int
expireHostTime int
}
func (r *RedLockOptions) repairOption() {
if r.perHostTimeout <= 0 {
r.perHostTimeout = DEFAULTMAXWAITSECOND
}
}
type RedLockOption func(*RedLockOptions)
func WithPerHostTimeout(perHostTimeout int) RedLockOption {
return func(o *RedLockOptions) {
o.perHostTimeout = perHostTimeout
}
}
func WithExpireHostTime(expireTime int) RedLockOption {
return func(o *RedLockOptions) {
o.expireHostTime = expireTime
}
}