@@ -39,139 +39,142 @@ g := godisson.NewGodisson(rdb, godisson.WithWatchDogTimeout(30*time.Second))
39
39
40
40
## 示例
41
41
42
- ### Mutex
42
+
43
+ ### Mutex
43
44
44
45
``` go
45
- package examples
46
+ package main
46
47
47
48
import (
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"
53
54
)
54
55
55
56
func main () {
56
57
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 ()
64
65
65
- g := godisson.NewGodisson (rdb, godisson.WithWatchDogTimeout (30 *time.Second ))
66
+ g := godisson.NewGodisson (rdb, godisson.WithWatchDogTimeout (30 *time.Second ))
66
67
67
- test1 (g)
68
- test2 (g)
68
+ test1 (g)
69
+ test2 (g)
69
70
}
70
71
71
72
// can't obtain lock in a same goroutine
72
73
func 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 )
92
93
}
93
94
94
95
func 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 )
123
125
124
126
}
125
127
128
+
126
129
```
127
130
128
131
129
132
### RLock
130
133
``` go
131
- package examples
134
+ package main
132
135
133
136
import (
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"
138
141
)
139
142
140
143
func main () {
141
144
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 ()
175
178
}
176
179
177
180
```
0 commit comments