go-redis分布式锁

redis分布式锁

package main  import ( 	fmt 	log 	sync 	time  	github.com/go-redis/redis )  // 声明一个全局的rdb变量 var rdb *redis.Client var mutex sync.Mutex  // 初始化连接 func initClient() (err error) { 	rdb = redis.NewClient(&redis.Options{ 		Addr:     ip:port, 		Password: , 		DB:       7, 	})  	_, err = rdb.Ping().Result() 	if err != nil { 		return err 	} 	return nil }  // 加锁 func Lock(key string) bool { 	// ex:设置默认过期时间10秒,防止死锁 	ex:=10*time.Second 	mutex.Lock() 	defer mutex.Unlock() 	bool,err := rdb.SetNX(key, `{lock:1}`, ex).Result() 	if err != nil { 		return bool 	} 	return bool }  // 解锁 func UnLock(key string) int64 { 	nums, err := rdb.Del(key).Result() 	if err != nil { 		log.Println(err.Error()) 		return 0 	} 	return nums }  func main() { 	err := initClient() 	if err != nil { 		fmt.Println(err) 	}  	b := Lock(lock) 	if b == true{ 		// 抢锁成功 		 		执行自己的逻辑 		 		nums:=UnLock(lock) 		if nums == 1{ 			// 释放锁成功 		} 	}else { 		// 抢锁失败 	} }