新聞中心
在大多數(shù)情況下,我們需要構(gòu)建系統(tǒng)時,需要為每一個可能涉及到的數(shù)據(jù)實體分配一個唯一、自增的主鍵(primary key)。這個主鍵的作用是標(biāo)識每一個實體,這樣系統(tǒng)在處理插入、查詢或更新數(shù)據(jù)時,就可以根據(jù)這個主鍵確定具體的實體,達(dá)到統(tǒng)一的管理目的。關(guān)于如何實現(xiàn)無依賴的自增主鍵,本文將會介紹如何可以通過緩存、數(shù)據(jù)庫表以及數(shù)據(jù)庫觸發(fā)器實現(xiàn)比較優(yōu)秀的成熟方案。

成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、嘉祥網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為嘉祥等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
使用緩存是一種最常見且最簡單的方案。緩存中保存當(dāng)前自增主鍵的當(dāng)前值,每次有新的實體需要分配主鍵時,從緩存中獲取當(dāng)前值,并原子地更新緩存的值,即可獲取到當(dāng)前的自增主鍵。下面是一個簡單的代碼示例,其中Cache是緩存的實例:
Integer currentVal = Cache.getVal();
if (currentVal == null) {
currentVal = 1;
}
Integer newVal = Cache.increaseValAtomic(currentVal + 1);
另外一種常見的實現(xiàn)方案是將當(dāng)前自增主鍵值保存在數(shù)據(jù)庫表中,每次有新的實體需要分配主鍵時,直接原子更新表內(nèi)保存的值,即可獲取到當(dāng)前的自增主鍵。
Integer currentVal = DB.queryCurrentVal();
DB.updateCurrentValAtomic(currentVal + 1);
Integer newVal = currentVal + 1;
對于某些場景,如果需要具備高性能的性能,可以利用數(shù)據(jù)庫觸發(fā)器實現(xiàn)自增主鍵的自動維護(hù)。比如,在MYSQL數(shù)據(jù)庫中,可以通過設(shè)置自動遞增的參數(shù),直接在創(chuàng)建表時就能完成自增的初始化,或者利用觸發(fā)器,每次實體插入時,觸發(fā)器從表中查詢最大的id值,然后將id自動+1,讓每次插入都獲得不同的id,而且自增過程也不需要進(jìn)行使用代碼處理,可以直接利用數(shù)據(jù)庫觸發(fā)器實現(xiàn),大大簡化處理步驟。
綜上所述,要想實現(xiàn)無依賴的自增主鍵,有多種方案可供選擇。從上面看出,緩存是最簡單、最常用的方案,每次都可以從緩存獲取最新的自增主鍵;另外,也可以將自增的當(dāng)前主鍵值保存在數(shù)據(jù)庫中;可以利用數(shù)據(jù)庫觸發(fā)器,每次插入時,系統(tǒng)就能自動維護(hù)自增主鍵,從而實現(xiàn)無依賴的自增主鍵。
成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開通再付費。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務(wù)商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營銷推廣服務(wù)眾多企業(yè)。電話:028-86922220
標(biāo)題名稱:如何實現(xiàn)無依賴的自增主鍵(不用redis做自增主鍵)
鏈接分享:http://m.fisionsoft.com.cn/article/dhcjppi.html


咨詢
建站咨詢
