@@ -39,139 +39,142 @@ g := godisson.NewGodisson(rdb, godisson.WithWatchDogTimeout(30*time.Second))
3939
4040## 示例
4141
42- ### Mutex
42+
43+ ### Mutex
4344
4445``` go
45- package examples
46+ package main
4647
4748import (
48- " github.com/cheerego/godisson "
49- " github.com/go-redis/redis/v8"
50- " github.com/pkg/errors"
51- " log"
52- " time"
49+ " github.com/cheerego/go-redisson "
50+ " github.com/go-redis/redis/v8"
51+ " github.com/pkg/errors"
52+ " log"
53+ " time"
5354)
5455
5556func main () {
5657
57- // create redis client
58- rdb := redis.NewClient (&redis.Options {
59- Addr: " localhost:6379" ,
60- Password: " " , // no password set
61- DB: 0 , // use default DB
62- })
63- defer rdb.Close ()
58+ // create redis client
59+ rdb := redis.NewClient (&redis.Options {
60+ Addr: " localhost:6379" ,
61+ Password: " " , // no password set
62+ DB: 0 , // use default DB
63+ })
64+ defer rdb.Close ()
6465
65- g := godisson.NewGodisson (rdb, godisson.WithWatchDogTimeout (30 *time.Second ))
66+ g := godisson.NewGodisson (rdb, godisson.WithWatchDogTimeout (30 *time.Second ))
6667
67- test1 (g)
68- test2 (g)
68+ test1 (g)
69+ test2 (g)
6970}
7071
7172// can't obtain lock in a same goroutine
7273func test1 (g *godisson .Godisson ) {
73- m1 := g.NewMutex (" godisson" )
74- m2 := g.NewMutex (" godisson" )
75-
76- err := m1.TryLock (-1 , 20000 )
77- if errors.Is (err, godisson.ErrLockNotObtained ) {
78- log.Println (" can't obtained lock" )
79- } else if err != nil {
80- log.Fatalln (err)
81- }
82- defer m1.Unlock ()
83-
84- // because waitTime = -1, waitTime < 0, try once, will return ErrLockNotObtained
85- err = m2.TryLock (-1 , 20000 )
86- if errors.Is (err, godisson.ErrLockNotObtained ) {
87- log.Println (" m2 must not obtained lock" )
88- } else if err != nil {
89- log.Fatalln (err)
90- }
91- time.Sleep (10 * time.Second )
74+ m1 := g.NewMutex (" godisson" )
75+ m2 := g.NewMutex (" godisson" )
76+
77+ err := m1.TryLock (-1 , 20000 )
78+ if errors.Is (err, godisson.ErrLockNotObtained ) {
79+ log.Println (" can't obtained lock" )
80+ } else if err != nil {
81+ log.Fatalln (err)
82+ }
83+ defer m1.Unlock ()
84+
85+ // because waitTime = -1, waitTime < 0, try once, will return ErrLockNotObtained
86+ err = m2.TryLock (-1 , 20000 )
87+ if errors.Is (err, godisson.ErrLockNotObtained ) {
88+ log.Println (" m2 must not obtained lock" )
89+ } else if err != nil {
90+ log.Fatalln (err)
91+ }
92+ time.Sleep (10 * time.Second )
9293}
9394
9495func test2 (g *godisson .Godisson ) {
95- m1 := g.NewMutex (" godisson" )
96- m2 := g.NewMutex (" godisson" )
97-
98- go func () {
99- err := m1.TryLock (-1 , 20000 )
100- if errors.Is (err, godisson.ErrLockNotObtained ) {
101- log.Println (" can't obtained lock" )
102- } else if err != nil {
103- log.Fatalln (err)
104- }
105- time.Sleep (10 * time.Second )
106- m1.Unlock ()
107- }()
108-
109- // waitTime > 0, after 10 milliseconds will obtain the lock
110- go func () {
111- time.Sleep (1 * time.Second )
112-
113- err := m2.TryLock (15000 , 20000 )
114- if errors.Is (err, godisson.ErrLockNotObtained ) {
115- log.Println (" m2 must not obtained lock" )
116- } else if err != nil {
117- log.Fatalln (err)
118- }
119- time.Sleep (10 * time.Second )
120-
121- m2.Unlock ()
122- }()
96+ m1 := g.NewMutex (" godisson" )
97+ m2 := g.NewMutex (" godisson" )
98+
99+ go func () {
100+ err := m1.TryLock (-1 , 20000 )
101+ if errors.Is (err, godisson.ErrLockNotObtained ) {
102+ log.Println (" can't obtained lock" )
103+ } else if err != nil {
104+ log.Fatalln (err)
105+ }
106+ time.Sleep (10 * time.Second )
107+ m1.Unlock ()
108+ }()
109+
110+ // waitTime > 0, after 10 milliseconds will obtain the lock
111+ go func () {
112+ time.Sleep (1 * time.Second )
113+
114+ err := m2.TryLock (15000 , 20000 )
115+ if errors.Is (err, godisson.ErrLockNotObtained ) {
116+ log.Println (" m2 must not obtained lock" )
117+ } else if err != nil {
118+ log.Fatalln (err)
119+ }
120+ time.Sleep (10 * time.Second )
121+
122+ m2.Unlock ()
123+ }()
124+ time.Sleep (20 * time.Second )
123125
124126}
125127
128+
126129```
127130
128131
129132### RLock
130133``` go
131- package examples
134+ package main
132135
133136import (
134- " github.com/cheerego/godisson "
135- " github.com/go-redis/redis/v8"
136- " log"
137- " time"
137+ " github.com/cheerego/go-redisson "
138+ " github.com/go-redis/redis/v8"
139+ " log"
140+ " time"
138141)
139142
140143func main () {
141144
142- // create redis client
143- rdb := redis.NewClient (&redis.Options {
144- Addr: " localhost:6379" ,
145- Password: " " , // no password set
146- DB: 0 , // use default DB
147- })
148- defer rdb.Close ()
149-
150- g := godisson.NewGodisson (rdb, godisson.WithWatchDogTimeout (30 *time.Second ))
151-
152- // lock with watchdog without retry
153- lock := g.NewRLock (" godisson" )
154-
155- err := lock.Lock ()
156- if err == godisson.ErrLockNotObtained {
157- log.Println (" Could not obtain lock" )
158- } else if err != nil {
159- log.Fatalln (err)
160- }
161- defer lock.Unlock ()
162-
163- // lock with retry、watchdog
164- // leaseTime value is -1, enable watchdog
165- lock2 := g.NewRLock (" godission-try-watchdog" )
166-
167- err = lock2.TryLock (20000 , -1 )
168- if err == godisson.ErrLockNotObtained {
169- log.Println (" Could not obtain lock" )
170- } else if err != nil {
171- log.Fatalln (err)
172- }
173- time.Sleep (10 * time.Second )
174- defer lock.Unlock ()
145+ // create redis client
146+ rdb := redis.NewClient (&redis.Options {
147+ Addr: " localhost:6379" ,
148+ Password: " " , // no password set
149+ DB: 0 , // use default DB
150+ })
151+ defer rdb.Close ()
152+
153+ g := godisson.NewGodisson (rdb, godisson.WithWatchDogTimeout (30 *time.Second ))
154+
155+ // lock with watchdog without retry
156+ lock := g.NewRLock (" godisson" )
157+
158+ err := lock.Lock ()
159+ if err == godisson.ErrLockNotObtained {
160+ log.Println (" Could not obtain lock" )
161+ } else if err != nil {
162+ log.Fatalln (err)
163+ }
164+ defer lock.Unlock ()
165+
166+ // lock with retry、watchdog
167+ // leaseTime value is -1, enable watchdog
168+ lock2 := g.NewRLock (" godission-try-watchdog" )
169+
170+ err = lock2.TryLock (20000 , -1 )
171+ if err == godisson.ErrLockNotObtained {
172+ log.Println (" Could not obtain lock" )
173+ } else if err != nil {
174+ log.Fatalln (err)
175+ }
176+ time.Sleep (10 * time.Second )
177+ defer lock.Unlock ()
175178}
176179
177180```
0 commit comments