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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Go Gorm 對(duì)增量計(jì)數(shù)器的原子更新

Go Gorm 對(duì)增量計(jì)數(shù)器的原子更新

Go
SMILET 2022-06-01 15:21:49
我有一個(gè)本質(zhì)上是用戶可以增加的計(jì)數(shù)器。但是,我想避免兩個(gè)用戶同時(shí)增加計(jì)數(shù)器的競(jìng)爭(zhēng)條件。有沒(méi)有辦法使用 Gorm 原子地增加一個(gè)計(jì)數(shù)器,而不是從數(shù)據(jù)庫(kù)中獲取值,增加,最后更新數(shù)據(jù)庫(kù)?
查看完整描述

2 回答

?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果要使用基本的 ORM 功能,可以在檢索記錄時(shí)使用FOR UPDATE查詢選項(xiàng),數(shù)據(jù)庫(kù)將鎖定該特定連接的記錄,直到該連接發(fā)出UPDATE查詢以更改該記錄。

SELECTUPDATE語(yǔ)句必須發(fā)生在同一個(gè)連接上,這意味著您需要將它們包裝在一個(gè)事務(wù)中(否則 Go 可能會(huì)通過(guò)不同的連接發(fā)送第二個(gè)查詢)。

請(qǐng)注意,這將使所有其他想要SELECT相同記錄的連接等到您完成UPDATE. 對(duì)于大多數(shù)應(yīng)用程序來(lái)說(shuō),這不是問(wèn)題,但如果您的并發(fā)性非常高,或者兩者之間的時(shí)間SELECT ... FOR UPDATEUPDATE長(zhǎng),那么這可能不適合您。

除了 之外FOR UPDATE,該FOR SHARE選項(xiàng)聽(tīng)起來(lái)也可以為您工作,鎖定爭(zhēng)用較少(但我不太清楚,不能肯定地說(shuō))。

注意:這假設(shè)您使用支持的 RDBMS SELECT ... FOR UPDATE; 如果沒(méi)有,請(qǐng)更新問(wèn)題以告訴我們您正在使用哪個(gè) RDBMS。

另一種選擇是繞過(guò) ORM 并執(zhí)行db.Exec("UPDATE counter_table SET counter = counter + 1 WHERE id = ?", 42)


查看完整回答
反對(duì) 回復(fù) 2022-06-01
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

一種可能的解決方案是使用 GORM 事務(wù)(https://gorm.io/docs/transactions.html)。


    err := db.Transaction(func(tx *gorm.DB) error {

        // Get model if exist

        var feature models.Feature

        if err := tx.Where("id = ?", c.Param("id")).First(&feature).Error; err != nil {

            return err

        }


        // Increment Counter

        if err := tx.Model(&feature).Update("Counter", feature.Counter+1).Error; err != nil {

            return err

        }


        return nil

    })


    if err != nil {

        c.Status(http.StatusInternalServerError)

        return

    }


    c.Status(http.StatusOK)


查看完整回答
反對(duì) 回復(fù) 2022-06-01
  • 2 回答
  • 0 關(guān)注
  • 262 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)