redsync 锁过期时间问题
for i :=0 ;i<gNum;i++ {
go func() {
defer wg.Done()
mutex := rs.NewMutex(mutexname)
//zookeeper的分布式锁 -
fmt.Println("开始获取锁")
if err := mutex.Lock(); err != nil {
panic(err)
}
fmt.Println("获取锁成功")
time.Sleep(time.Second*8)
fmt.Println("开始释放锁")
if ok, err := mutex.Unlock(); !ok || err != nil {
panic("unlock failed")
}
fmt.Println("释放锁成功")
}()
}
在上述代码中,我执行时将time.Sleep(time.Second8)改为了time.Sleep(time.Second10),发现代码报错了:panic:lock already taken,locked nodes:[0]
经过排查发现,源码中redis锁的过期时间是8s。我就有一个疑问了,如果说 我的业务要执行10s甚至更长的时间,那就会跟上面以上报错了。如果想修改redis锁的过期时间,是不是要重写redsync的源码呢?
21
收起
正在回答 回答被采纳积分+1
2回答
Go开发工程师全新版
- 参与学习 494 人
- 解答问题 572 个
风口上的技术,薪资水平遥遥领先,现在学习正值红利期! 未来3-5年,Go语言势必成为企业高性能项目中不可替代的语言 从基础到项目实战再到重构,对转行人员友好,真正从入门到精通!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星