不跟你多bb,上張圖好說話
為什麼 是64位呢,因為返回值是long型別是64位,但是第一位是符號位不可用,所有只剩下63位時間戳的長度,決定了該演算法使用的年限,時間戳記錄的不是當前時間戳,而是當前時間戳和和起始時間戳的差值,起始時間戳由程式設計師自己設定
41位 按如下公式計算可用時間約為 (1l << 41) / (1000l * 60 * 60 * 24 * 365) = 49 年 ,可根據實際情況控制 工作機器id 的長度
序列號位數決定了當前毫秒,當前機器能產生的最多訂單號 2^12 = 4096 個
工作機器id 的長度決定了能支援同時多少臺機器使用 2^10 = 1024
/**
* @author wcn
* @date 2019/12/23 17:09
*/public
class
snowflakeutil
if(machineid > max_machine_num || machineid <0)
this
.datacenterid = datacenterid;
this
.machineid = machineid;
}/**
* 產生下乙個id
** @return
*/public
synchronized
long
nextid()
if(currenttimemillis == laststmp)
}else
laststmp = currenttimemillis;
//就是用相對毫秒數、機器id和自增序號拼接
return
(currenttimemillis - start_stmp)
<< timestmp_left //時間戳部分
| datacenterid << data_center_left //資料中心部分
| machineid << machine_left //機器標識部分
| sequence;
//序列號部分
}private
long
getnextmill()
return mill;
}private
long
getcurrenttimemillis()
}
ID 生成器 雪花演算法
我們的業務需求中通常有需要一些唯一的id,來記錄我們某個資料的標識 看圖理解 詳細的看 注釋 public class snowflakeidworker if datacenterid maxdatacenterid datacenterid 0 this.workerid workerid th...
雪花演算法生成唯一ID
author ws description 雪花演算法生成唯一id datetime 2020 6 26 10 07 public class snowflake 起始的時間戳 2020 05 27 00 00 00 private final static long start stamp 159...
基於雪花演算法生成64位ID
import logging import time class generator object 64位id 1 符號位不用 41 毫秒 4 機器id 6 業務編碼 12 重複累加 基礎時間 毫秒 1577808000000 2020 01 01 00 00 最大支援時間差 21990232555...