class customsnowflake
if (workerid > maxworkerid || workerid < 0)
this.datacenterid = datacenterid;
this.workerid = workerid;
} public synchronized long nextid()
// 檢視時間是否在同一毫秒內
if (timestamp == lasttimestamp)
} else
lasttimestamp = timestamp;
return (timestamp - starttimestamp) << timestampshift
| datacenterid << datacenteridshift
| workerid << workeridshift
| sequence;
} /**
* 獲取下一毫秒
** @return 時間戳
*/private long getnextmill()
return timestamp;
} /**
* 時間戳
** @return 當前時間的時間戳
1、為啥用-1l進行位移,不用1l呢;(自己測試一下,便知其中奧妙!)
2、~(...) 這個符號的作用!(忍不住想說一下:跟 -1l^(...) 等價)
1、約300個/毫秒
2、有14個字元,最多有19個,69年一輪迴(畫外音:我感覺應該弄成60,乙個甲子嗎);
3、按乙個long型別長度(64位)計算;
SnowFlake 雪花演算法 學習記錄2
snowflake是twitter開源的分布式id生成演算法,第一版基於apache thrift框架。現在github上看到也只有一版,這個版本是用scale寫的,他們內部在使用的時候做了很多改造。這個文件其實就是告訴我們 這個專案還在完善,完善的方向就是讓snowflake適配其他環境,具體什麼...
雪花演算法 snowflake
分布式系統中,有一些需要使用全域性唯一id的場景,這種時候為了防止id衝突可以使用36位的uuid,但是uuid有一些缺點,首先他相對比較長,另外uuid一般是無序的。有些時候我們希望能使用一種簡單一些的id,並且希望id能夠按照時間有序生成。而twitter的snowflake解決了這種需求,最初...
SnowFlake 雪花演算法
首先雪花演算法就是生成乙個64位的二進位制資料,最終轉換成長度為19的十進位制正整數整型資料 0 0000000000 0000000000 0000000000 0000000000 0 00000 00000 000000000000解釋一下這64位分別代表什麼意思,從左往右。當然這個演算法的強...