//////動態生產有規律的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; }
}}
測試**:
classprogram
});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位分別代表什麼意思,從左往右。當然這個演算法的強...