https://github.com/study-only/go-locks
Redis分布式锁
SET
Redis 2.6.12SET
SET key value [EX seconds] [PX milliseconds] [NX|XX]
可选参数
EX secondssecondsSET key value EX secondsSETEX key seconds valuePX millisecondsmillisecondsSET key value PX millisecondsPSETEX key milliseconds valueNXSET key value NXSETNX key valueXX
返回值
Redis 2.6.12SETRedis 2.6.12SETOKNXXX
Redis分布式锁实现原理
SETSET key value EX seconds NX
import (
"errors"
"time"
"github.com/go-redis/redis"
)
var redisClient *redis.Client
type redisLock struct {
name string
expiry time.Duration
}
func (l *redisLock) TryLock() error {
if ok, _ := redisClient.SetNX(l.name, 1, l.expiry).Result(); !ok {
return errors.New("redis lock: already locked")
}
return nil
}
func (l *redisLock) Unlock() error {
return redisClient.Del(l.name).Err()
}