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 {
// 抢锁失败
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。