Redis生成主鍵的優點及與其他生成主鍵方式的對比

使用Redis生成主鍵的優點及與其他生成主鍵方式的對比
Redis生成ID
當使用數據庫來生成ID性能不夠要求的時候,我們可以嘗試使用Redis來生成ID。這主要依賴於Redis是單線程的,所以也可以用生成全局唯一的ID。可以用Redis的原子操作 INCR和INCRBY來實現。

可以使用Redis集羣來獲取更高的吞吐量。假如一個集羣中有5臺Redis。可以初始化每臺Redis的值分別是1,2,3,4,5,然後步長都是5。各個Redis生成的ID爲:

A:1,6,11,16,21

B:2,7,12,17,22

C:3,8,13,18,23

D:4,9,14,19,24

E:5,10,15,20,25

這個,隨便負載到哪個機確定好,未來很難做修改。但是3-5臺服務器基本能夠滿足器上,都可以獲得不同的ID。但是步長和初始值一定需要事先需要了。使用Redis集羣也可以方式單點故障的問題。

另外,比較適合使用Redis來生成每天從0開始的流水號。比如訂單號=日期+當日自增長號。可以每天在Redis中生成一個Key,使用INCR進行累加。

優點:

1)不依賴於數據庫,靈活方便,且性能優於數據庫。

2)數字ID天然排序,對分頁或者需要排序的結果很有幫助。

缺點:

1)如果系統中沒有Redis,還需要引入新的組件,增加系統複雜度。

2)需要編碼和配置的工作量比較大。

用INT做主鍵的優點:

    1、需要很小的數據存儲空間,僅僅需要4 byte 。

    2、insert和update操作時使用INT的性能比GUID好,所以使用int將會提高應用程序的性能。

    3、index和Join 操作,int的性能最好。

    4、容易記憶。

    5、支持通過函數獲取最新的值,如:Scope_Indentity() 。

使用INT做主鍵的缺點

    1、如果經常有合併表的操作,就可能會出現主鍵重複的情況。

    2、使用INT數據範圍有限制。如果存在大量的數據,可能會超出INT的取值範圍。

    3、很難處理分佈式存儲的數據表。

使用GUID做主鍵的優點:

    1、它是獨一無二的。

    2、出現重複的機會少。

    3、適合大量數據中的插入和更新操作。

    4、跨服務器數據合併非常方便。

使用GUID做主鍵的缺點:

    1、存儲空間大(16 byte),因此它將會佔用更多的磁盤大小。

    2、很難記憶。join操作性能比int要低。

    3、沒有內置的函數獲取最新產生的guid主鍵。

    4、GUID做主鍵將會添加到表上的所以其他索引中,因此會降低性能。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章