|
|
@@ -6,22 +6,23 @@ import ( |
|
|
|
) |
|
|
|
|
|
|
|
type DistributeLock struct { |
|
|
|
lockKey string |
|
|
|
} |
|
|
|
|
|
|
|
func NewDistributeLock() *DistributeLock { |
|
|
|
return &DistributeLock{} |
|
|
|
func NewDistributeLock(lockKey string) *DistributeLock { |
|
|
|
return &DistributeLock{lockKey: lockKey} |
|
|
|
} |
|
|
|
|
|
|
|
func (lock *DistributeLock) Lock(lockKey string, expireTime time.Duration) bool { |
|
|
|
isOk, _ := redis_client.Setnx(lockKey, "", expireTime) |
|
|
|
func (lock *DistributeLock) Lock(expireTime time.Duration) bool { |
|
|
|
isOk, _ := redis_client.Setnx(lock.lockKey, "", expireTime) |
|
|
|
return isOk |
|
|
|
} |
|
|
|
|
|
|
|
func (lock *DistributeLock) LockWithWait(lockKey string, expireTime time.Duration, waitTime time.Duration) bool { |
|
|
|
func (lock *DistributeLock) LockWithWait(expireTime time.Duration, waitTime time.Duration) bool { |
|
|
|
start := time.Now().Unix() * 1000 |
|
|
|
duration := waitTime.Milliseconds() |
|
|
|
for { |
|
|
|
isOk, _ := redis_client.Setnx(lockKey, "", expireTime) |
|
|
|
isOk, _ := redis_client.Setnx(lock.lockKey, "", expireTime) |
|
|
|
if isOk { |
|
|
|
return true |
|
|
|
} |
|
|
@@ -34,7 +35,7 @@ func (lock *DistributeLock) LockWithWait(lockKey string, expireTime time.Duratio |
|
|
|
return false |
|
|
|
} |
|
|
|
|
|
|
|
func (lock *DistributeLock) UnLock(lockKey string) error { |
|
|
|
_, err := redis_client.Del(lockKey) |
|
|
|
func (lock *DistributeLock) UnLock() error { |
|
|
|
_, err := redis_client.Del(lock.lockKey) |
|
|
|
return err |
|
|
|
} |