redisdb/mutex.go

40 lines
662 B
Go
Raw Permalink Normal View History

2022-04-19 10:58:07 +00:00
package redisdb
import (
"time"
"github.com/go-redsync/redsync/v4"
"github.com/go-redsync/redsync/v4/redis/goredis/v8"
)
// NewMutex ...
func NewMutex(name string) *Mutex {
pool := goredis.NewPool(rdb)
rs := redsync.New(pool)
opts := []redsync.Option{
redsync.WithRetryDelay(time.Millisecond * 100), // retry after 100 ms
redsync.WithTries(10), // try 10 times
}
m := rs.NewMutex(name, opts...)
return &Mutex{mu: m}
}
// Mutex ...
type Mutex struct {
mu *redsync.Mutex
}
// Lock ...
func (m Mutex) Lock() error {
return m.mu.Lock()
}
// Unlock ...
func (m Mutex) Unlock() (bool, error) {
return m.mu.Unlock()
}