redsync 锁过期时间问题

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的源码呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
qq_孤海_0 2024-08-13 20:42:56

redsync.WithExpiry(10*time.Second)

可以这样来配置指定的过期时间

bobby 2023-03-19 18:01:27

建议把redsync的源码放在自己的源码中这样可以自己修改

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Go开发工程师全新版
  • 参与学习       494    人
  • 解答问题       572    个

风口上的技术,薪资水平遥遥领先,现在学习正值红利期! 未来3-5年,Go语言势必成为企业高性能项目中不可替代的语言 从基础到项目实战再到重构,对转行人员友好,真正从入门到精通!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师