第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于redis分布式鎖的問題. 如果沒搶到鎖,那么應該怎么做,一直重復搶鎖的操作嗎?

關于redis分布式鎖的問題. 如果沒搶到鎖,那么應該怎么做,一直重復搶鎖的操作嗎?

紅顏莎娜 2019-01-16 02:10:46
新手初學redis,嘗試redis鎖的時候,go代碼如下: func main() { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", }) for i := 0; i < 100; i++ { go func() { for { //一直 for 循環(huán)搶鎖嗎? ok, err := client.SetNX("sync", true, time.Second*5).Result() if err == 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() if err != nil { log.Println(err) } break } //time.Sleep(time.Millisecond * 10) } }() } time.Sleep(time.Second * 20) } 代碼中我開了 100 個協(xié)程搶鎖,操作一個數(shù)據(jù).我的疑問是,當一個協(xié)程搶到了這個 sync 鎖,那么其他的 99 個協(xié)程, 都一直在不停的在一個循環(huán)中重復搶鎖嗎?這樣子是否會對redis產(chǎn)生大量的無意義的請求...網(wǎng)上搜了一下相關的實現(xiàn)demo代碼,發(fā)現(xiàn)都是類似的 while(true) { // xxxxxxx } 進行搶鎖....所以很疑惑,若是真實生產(chǎn)環(huán)境也是這樣實現(xiàn)嘛....還是我一開始就錯了...如果有相關資料或者是搜索關鍵詞,還望大佬指點一二.
查看完整描述

3 回答

?
慕虎7371278

TA貢獻1802條經(jīng)驗 獲得超4個贊

看你要實現(xiàn)什么樣的鎖,或者基于什么樣的使用場景,比如說排它鎖redis就實現(xiàn)不了,排它鎖在獲取不到鎖的情況下會阻塞進入等待隊列。在其他進程釋放鎖時會通知該進程再去獲取鎖,redis不提供這種基于key的通知機制,所以他實現(xiàn)不了排它鎖。不過分布式排它鎖,可以由Zookeeper實現(xiàn)。

另外一種分布式鎖的實現(xiàn)方式是通過樂觀鎖和自旋的實現(xiàn)方式,就是你說的那種方式,不過一般會設置超時時間,也就是redis設置keyttl。這樣不至于進程一直等待下去。這種鎖適應于鎖內操作時間比較短,鎖競爭不是那么激烈的情況。

你說的那種100個進程搶鎖的情況,競爭這么激烈,還是用排它鎖比較好。

查看完整回答
反對 回復 2019-02-12
?
FFIVE

TA貢獻1797條經(jīng)驗 獲得超6個贊

這個原因充分說明了要項目驅動學習。
只有你知道具體的項目的場景,才可以決定自己這個鎖怎么處理。
比如,你如果搶不到資源就必須等待,而且是同步請求,那么必須等待。
比如,你如果可以接受若一致,就可以考慮等待多久鎖,然后放棄,記錄日志或者其他補償機制。
當然這個就類似于 ReentrantLock 里面的 tryLock 和 tryLock(long timeout, TimeUnit unit) 的區(qū)別

查看完整回答
反對 回復 2019-02-12
?
蝴蝶刀刀

TA貢獻1801條經(jīng)驗 獲得超8個贊

需要帶鎖的操作一遍不會這樣的邏輯。。。
比如緩存數(shù)據(jù)的更新。

1.取到鎖的人去查數(shù)據(jù)庫并更新數(shù)據(jù)
2.未取到鎖的要么直接返回空,要么就是要設置二級緩存,把二級緩存的數(shù)據(jù)返回。。

大家都一直要拿到同一個鎖,應該沒有這種操作吧?

具體還是要有業(yè)務邏輯來進行代碼編寫,不然沒有意義

查看完整回答
反對 回復 2019-02-12
  • 3 回答
  • 0 關注
  • 2097 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號