Distributed lock based on redis.
redis-lock supports watchdog mechanism in redisson.
go get
go get -u github.com/XdpCs/redis-lock
go mod
require github.com/XdpCs/redis-lock latest
Error handling is simplified to panic for shorter example.
You can run this program in this directory.
package main
import (
"context"
"time"
redislock "github.com/XdpCs/redis-lock"
"github.com/redis/go-redis/v9"
)
func main() {
// init context
ctx := context.Background()
// init redis client
rdb := redis.NewClient(&redis.Options{
Addr: ":6379",
})
// close redis client
defer rdb.Close()
// flush redis
_ = rdb.FlushDB(ctx).Err()
// init redislock client
client, err := redislock.NewDefaultClient(rdb)
if err != nil {
panic(err)
}
// try lock with default parameter
mutex, err := client.TryLock(ctx, "XdpCs", -1)
if err != nil {
panic(err)
}
defer func(mutex *redislock.Mutex, ctx context.Context) {
// unlock mutex
err := mutex.Unlock(ctx)
if err != nil {
panic(err)
}
}(mutex, ctx)
time.Sleep(time.Second * 30)
}
redis-lock is under the MIT. Please refer to LICENSE for more information.