修改redis的传参,接收三种方式redis
This commit is contained in:
@@ -1,11 +1,8 @@
|
|||||||
module github.com/yuninks/lockx
|
module github.com/yuninks/lockx
|
||||||
|
|
||||||
go 1.19
|
go 1.20
|
||||||
|
|
||||||
require (
|
require github.com/go-redis/redis/v8 v8.11.5
|
||||||
code.yun.ink/open/timer v1.0.1
|
|
||||||
github.com/go-redis/redis/v8 v8.11.5
|
|
||||||
)
|
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
code.yun.ink/open/timer v1.0.1 h1:ZWecU5K0rFB15p8DZubozTEwo1vrO4mUCRwEoD1tbEQ=
|
|
||||||
code.yun.ink/open/timer v1.0.1/go.mod h1:i6+mEL5eUab+9ZDtxt9S5fMiJkwVLBRsNmfLj2qzN30=
|
|
||||||
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
|
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
|
||||||
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||||
|
|||||||
@@ -11,14 +11,14 @@ import (
|
|||||||
|
|
||||||
// 全局锁
|
// 全局锁
|
||||||
type globalLock struct {
|
type globalLock struct {
|
||||||
redis *redis.Client
|
redis redis.UniversalClient
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
uniqueKey string
|
uniqueKey string
|
||||||
value string
|
value string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGlobalLock(ctx context.Context, red *redis.Client, uniqueKey string) *globalLock {
|
func NewGlobalLock(ctx context.Context, red redis.UniversalClient, uniqueKey string) *globalLock {
|
||||||
ctx, cancel := context.WithTimeout(ctx, opt.lockTimeout)
|
ctx, cancel := context.WithTimeout(ctx, opt.lockTimeout)
|
||||||
return &globalLock{
|
return &globalLock{
|
||||||
redis: red,
|
redis: red,
|
||||||
@@ -44,7 +44,7 @@ func (g *globalLock) Lock() bool {
|
|||||||
resp, err := g.redis.Eval(g.ctx, script, []string{g.uniqueKey}, g.value, 5).Result()
|
resp, err := g.redis.Eval(g.ctx, script, []string{g.uniqueKey}, g.value, 5).Result()
|
||||||
if resp != "OK" {
|
if resp != "OK" {
|
||||||
_ = err
|
_ = err
|
||||||
log.Println("globalLock Lock", resp, err, g.uniqueKey, g.value)
|
log.Println("global Lock Lock", resp, err, g.uniqueKey, g.value)
|
||||||
}
|
}
|
||||||
if resp == "OK" {
|
if resp == "OK" {
|
||||||
g.refresh()
|
g.refresh()
|
||||||
@@ -79,7 +79,7 @@ func (g *globalLock) Unlock() bool {
|
|||||||
|
|
||||||
resp, err := g.redis.Eval(g.ctx, script, []string{g.uniqueKey}, g.value).Result()
|
resp, err := g.redis.Eval(g.ctx, script, []string{g.uniqueKey}, g.value).Result()
|
||||||
if resp != "OK" {
|
if resp != "OK" {
|
||||||
log.Println("globalLock Unlock", resp, err, g.uniqueKey, g.value)
|
log.Println("global Lock Unlock", resp, err, g.uniqueKey, g.value)
|
||||||
}
|
}
|
||||||
g.cancel()
|
g.cancel()
|
||||||
return true
|
return true
|
||||||
@@ -114,7 +114,7 @@ func (g *globalLock) refreshExec() bool {
|
|||||||
|
|
||||||
resp, err := g.redis.Eval(g.ctx, script, []string{g.uniqueKey}, g.value, 5).Result()
|
resp, err := g.redis.Eval(g.ctx, script, []string{g.uniqueKey}, g.value, 5).Result()
|
||||||
if resp != "OK" {
|
if resp != "OK" {
|
||||||
log.Println("globalLock refresh", resp, err, g.uniqueKey, g.value)
|
log.Println("global Lock refresh", resp, err, g.uniqueKey, g.value)
|
||||||
}
|
}
|
||||||
return resp == "OK"
|
return resp == "OK"
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"code.yun.ink/open/timer/lockx"
|
"github.com/yuninks/lockx"
|
||||||
"github.com/go-redis/redis/v8"
|
"github.com/go-redis/redis/v8"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user