C 實現 Snowflake演算法生成唯一性Id

2022-01-13 01:23:17 字數 1434 閱讀 7542

///

///動態生產有規律的id

/// public

class

snowflake

public

snowflake()

public snowflake(long

machineid)

public snowflake(long machineid, long

datacenterid)

private

void snowflakes(long machineid, long

datacenterid)

snowflake.machineid =machineid;

}if (datacenterid >= 0

)

snowflake.datacenterid =datacenterid;}}

//////

生成當前時間戳

/// ///

毫秒 private

static

long

gettimestamp()

//////

獲取下一微秒時間戳

/// ///

///private

static

long getnexttimestamp(long

lasttimestamp)

return

timestamp;

}//////

獲取長整形的id

/// ///

public

long

getid()

}else

if (timestamp snowflake.lasttimestamp = timestamp; //

把當前時間戳儲存為最後生成id的時間戳

long id = ((timestamp - twepoch) << (int

)timestampleftshift)

| (datacenterid << (int

)datacenteridshift)

| (machineid << (int

)machineidshift)

|sequence;

return

id; }

}}

測試**:

class

program

});tasks.add(task);

}task.waitall(tasks.toarray());

console.writeline(blockingcollection.distinct().count());

console.readkey();

}}

github:

類snowflake演算法

snowflake是twitter開源的分布式id生成演算法,其核心思想是 乙個long型的id,使用其中41bit作為毫秒數,10bit作為機器編號,12bit作為毫秒內序列號。這個演算法單機每秒內理論上最多可以生成1000 2 12 也就是400w的id,完全能滿足業務的需求。借鑑snowfla...

雪花演算法 snowflake

分布式系統中,有一些需要使用全域性唯一id的場景,這種時候為了防止id衝突可以使用36位的uuid,但是uuid有一些缺點,首先他相對比較長,另外uuid一般是無序的。有些時候我們希望能使用一種簡單一些的id,並且希望id能夠按照時間有序生成。而twitter的snowflake解決了這種需求,最初...

SnowFlake 雪花演算法

首先雪花演算法就是生成乙個64位的二進位制資料,最終轉換成長度為19的十進位制正整數整型資料 0 0000000000 0000000000 0000000000 0000000000 0 00000 00000 000000000000解釋一下這64位分別代表什麼意思,從左往右。當然這個演算法的強...