2016-05-17 43 views
0

我有一個程序,執行以下操作:Couchbase獲得(),其次是單位遞增()

  1. 檢查的關鍵使用GET()

  2. 如果它存在,則存在於couchbase不要做任何事情,向調用的應用程序返回一個錯誤。

  3. 如果該鍵不存在,然後用1

的值加一所以基本上,我的鑰匙與增量創造的價值永遠是1,實際上不會遞增(IM使用Increment只是用原子性來創建密鑰)。

我的問題是如果在同一時間從3個請求調用Get()操作..?

第一個請求是否會成功遞增密鑰,並且上面提到的第2點可用於其餘的2個請求。

將所有3個請求面對點數1,然後遞增鍵3次..?

使用.NET SDK for couchbase。

回答

1

只需使用insert代替當前正在使用的操作序列。插入關於單個鍵是原子的,所以只有一個會話會成功,所有其他併發/後續插入將失敗。

var result = await bucket.InsertAsync("key", 1); 

如果操作成功,該項目之前並不存在,如果它失敗,錯誤代碼KEY_EXISTS成功與價值1中創建,那麼該項目已經存在,推測可能與值1,如果沒有其他人改變了它。

+0

作品!非常感謝您的幫助.. !非常感激 ! – Neville