新手初学redis,尝试redis锁的时候,go代码如下:funcmain(){client:=redis.NewClient(&redis.Options{Addr:"localhost:6379",})fori:=0;i<100;i++{gofunc(){for{//一直for循环抢锁吗?ok,err:=client.SetNX("sync",true,time.Second*5).Result()iferr==nil&&ok{res,err:=client.Get("num").Result()fmt.Printf("num:%s\n",res)num,err:=strconv.Atoi(res)err=client.Set("num",num+1,0).Err()_,err=client.Del("sync").Result()iferr!=nil{log.Println(err)}break}//time.Sleep(time.Millisecond*10)}}()}time.Sleep(time.Second*20)}代码中我开了100个协程抢锁,操作一个数据.我的疑问是,当一个协程抢到了这个sync锁,那么其他的99个协程,都一直在不停的在一个循环中重复抢锁吗?这样子是否会对redis产生大量的无意义的请求...网上搜了一下相关的实现demo代码,发现都是类似的while(true){//xxxxxxx}进行抢锁....所以很疑惑,若是真实生产环境也是这样实现嘛....还是我一开始就错了...如果有相关资料或者是搜索关键词,还望大佬指点一二.
PIPIONE
白衣染霜花
相关分类