新手初學(xué)redis,嘗試redis鎖的時(shí)候,go代碼如下:funcmain(){client:=redis.NewClient(&redis.Options{Addr:"localhost:6379",})fori:=0;i<100;i++{gofunc(){for{//一直for循環(huán)搶鎖嗎?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)}代碼中我開(kāi)了100個(gè)協(xié)程搶鎖,操作一個(gè)數(shù)據(jù).我的疑問(wèn)是,當(dāng)一個(gè)協(xié)程搶到了這個(gè)sync鎖,那么其他的99個(gè)協(xié)程,都一直在不停的在一個(gè)循環(huán)中重復(fù)搶鎖嗎?這樣子是否會(huì)對(duì)redis產(chǎn)生大量的無(wú)意義的請(qǐng)求...網(wǎng)上搜了一下相關(guān)的實(shí)現(xiàn)demo代碼,發(fā)現(xiàn)都是類(lèi)似的while(true){//xxxxxxx}進(jìn)行搶鎖....所以很疑惑,若是真實(shí)生產(chǎn)環(huán)境也是這樣實(shí)現(xiàn)嘛....還是我一開(kāi)始就錯(cuò)了...如果有相關(guān)資料或者是搜索關(guān)鍵詞,還望大佬指點(diǎn)一二.
跪求!redis實(shí)現(xiàn)分布式鎖,如何持續(xù)搶鎖操作?
藍(lán)山帝景
2019-06-13 09:55:56