訂單Id生成之雪花演算法

2021-10-01 16:16:51 字數 1318 閱讀 7499

不跟你多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...