資源簡介
代碼片段和文件信息
package?util;
import?java.lang.management.ManagementFactory;
import?java.net.InetAddress;
import?java.net.NetworkInterface;
/**
?*?名稱:IdWorker.java
?*?描述:分布式自增長ID
?*?
?*?????Twitter的?Snowflake JAVA實現方案
?*?
?*?核心代碼為其IdWorker這個類實現,其原理結構如下,我分別用一個0表示一位,用—分割開部分的作用:
?*?1||0---0000000000?0000000000?0000000000?0000000000?0?---?00000?---00000?---000000000000
?*?在上面的字符串中,第一位為未使用(實際上也可作為long的符號位),接下來的41位為毫秒級時間,
?*?然后5位datacenter標識位,5位機器ID(并不算標識符,實際是為線程標識),
?*?然后12位該毫秒內的當前毫秒內的計數,加起來剛好64位,為一個Long型。
?*?這樣的好處是,整體上按照時間自增排序,并且整個分布式系統內不會產生ID碰撞(由datacenter和機器ID作區分),
?*?并且效率較高,經測試,snowflake每秒能夠產生26萬ID左右,完全滿足需要。
?*?
?*?64位ID?(42(毫秒)+5(機器ID)+5(業務編碼)+12(重復累加))
?*
?*?@author?Polim
?*/
public?class?IdWorker?{
????//?時間起始標記點,作為基準,一般取系統的最近時間(一旦確定不能變動)
????private?final?static?long?twepoch?=?1288834974657L;
????//?機器標識位數
????private?final?static?long?workerIdBits?=?5L;
????//?數據中心標識位數
????private?final?static?long?datacenterIdBits?=?5L;
????//?機器ID最大值
????private?final?static?long?maxWorkerId?=?-1L?^?(-1L?<????//?數據中心ID最大值
????private?final?static?long?maxDatacenterId?=?-1L?^?(-1L?<????//?毫秒內自增位
????private?final?static?long?sequenceBits?=?12L;
????//?機器ID偏左移12位
????private?final?static?long?workerIdShift?=?sequenceBits;
????//?數據中心ID左移17位
????private?final?static?long?datacenterIdShift?=?sequenceBits?+?workerIdBits;
????//?時間毫秒左移22位
????private?final?static?long?timestampLeftShift?=?sequenceBits?+?workerIdBits?+?datacenterIdBits;
????private?final?static?long?sequenceMask?=?-1L?^?(-1L?<????/*?上次生產id時間戳?*/
????private?static?long?lastTimestamp?=?-1L;
????//?0,并發控制
????private?long?sequence?=?0L;
????private?final?long?workerId;
????//?數據標識id部分
????private?final?long?datacenterId;
????public?IdWorker(){
????????this.datacenterId?=?getDatacenterId(maxDatacenterId);
????????this.workerId?=?getMaxWorkerId(datacenterId?maxWorkerId);
????}
????/**
?????*?@param?workerId
?????*????????????工作機器ID
?????*?@param?datacenterId
?????*????????????序列號
?????*/
????public?IdWorker(long?workerId?long?datacenterId)?{
????????if?(workerId?>?maxWorkerId?||?workerId?0)?{
????????????throw?new?IllegalArgumentException(String.format(“worker?Id?can‘t?be?greater?than?%d?or?less?than?0“?maxWorkerId));
????????}
????????if?(datacenterId?>?maxDatacenterId?||?datacenterId?0)?{
????????????throw?new?IllegalArgumentException(String.format(“datacenter?Id?can‘t?be?greater?than?%d?or?less?than?0“?maxDatacenterId));
????????}
????????this.workerId?=?workerId;
????????this.datacenterId?=?datacenterId;
????}
????/**
?????*?獲取下一個ID
?????*
?????*?@return
?????*/
????public?synchronized?long?nextId()?{
????????long?timestamp?=?timeGen();
????????if?(timestamp?????????????throw?new?RuntimeException(String.format(“Clock?moved?backwards.??Refusing?to?generate?id?for?%d?milliseconds“?lastTimestamp?-?timestamp));
????????}
????????if?(lastTimestamp?==?timestamp)?{
????????????//?當前毫秒內,則+1
????????????seq
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-09-09?22:56??十次方\
?????目錄???????????0??2018-09-09?22:56??十次方\前端\
?????文件??????757408??2018-09-09?22:56??十次方\前端\十次方前端系統開發-day1.pdf
?????文件?????1575679??2018-09-09?22:56??十次方\前端\十次方前端系統開發v1.0--第2章.pdf
?????文件??????649229??2018-09-09?22:56??十次方\前端\十次方前端系統開發v1.0--第3章.pdf
?????文件??????612715??2018-09-09?22:56??十次方\前端\十次方前端系統開發v1.0--第4章.pdf
?????文件??????614392??2018-09-09?22:56??十次方\前端\十次方前端系統開發v1.0--第5章.pdf
?????文件??????741804??2018-09-09?22:55??十次方\前端\十次方前端系統開發v1.0--第6章.pdf
?????目錄???????????0??2018-09-09?22:56??十次方\工具類\
?????文件????????5989??2018-09-09?22:56??十次方\工具類\IdWorker.java
?????文件????????1650??2018-09-09?22:56??十次方\工具類\JwtUtil.java
?????目錄???????????0??2018-09-09?22:56??十次方\建表語句\
?????文件????????3032??2018-09-09?22:56??十次方\建表語句\db_article.sql
?????文件????????2597??2018-09-09?22:56??十次方\建表語句\db_ba
?????文件????????1304??2018-09-09?22:56??十次方\建表語句\db_friend.sql
?????文件????????5800??2018-09-09?22:56??十次方\建表語句\db_gathering.sql
?????文件????????3840??2018-09-09?22:56??十次方\建表語句\db_qa.sql
?????文件????????4437??2018-09-09?22:56??十次方\建表語句\db_recruit.sql
?????文件????????3179??2018-09-09?22:56??十次方\建表語句\db_user.sql
?????目錄???????????0??2018-09-09?22:56??十次方\微服務\
?????文件?????1628982??2018-09-09?22:56??十次方\微服務\十次方微服務開發v1.0--第10章.pdf
?????文件??????705807??2018-09-09?22:55??十次方\微服務\十次方微服務開發v1.0--第6章.pdf
?????文件??????659938??2018-09-09?22:54??十次方\微服務\十次方微服務開發v1.0--第7章.pdf
?????文件??????962219??2018-09-09?22:55??十次方\微服務\十次方微服務開發v1.0--第8章.pdf
?????文件?????1443206??2018-09-09?22:55??十次方\微服務\十次方微服務開發v1.0--第9章.pdf
?????文件?????1175423??2018-09-09?22:54??十次方\微服務\十次方微服務開發v1.1--第1章.pdf
?????文件??????476460??2018-09-09?22:54??十次方\微服務\十次方微服務開發v1.1--第2章.pdf
?????文件??????593796??2018-09-09?22:54??十次方\微服務\十次方微服務開發v1.1--第3章.pdf
?????文件??????725566??2018-09-09?22:54??十次方\微服務\十次方微服務開發v1.1--第4章.pdf
?????文件?????1042724??2018-09-09?22:54??十次方\微服務\十次方微服務開發v1.1--第5章.pdf
?????目錄???????????0??2018-09-09?23:02??十次方\文檔\
............此處省略5個文件信息
- 上一篇:基于SSH的網上書城完整代碼包括后臺
- 下一篇:UCINET6.212英文版+注冊機
評論
共有 條評論