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 { // 抢锁失败 } }