Xid:Go 輕量級 ID 生成器
在分佈式系統中,唯一 ID(GUID)是必不可少的,常見的方案包括 UUID、MongoDB ObjectID 和 Twitter Snowflake。其中 UUID 雖然通用,但長度較長,而 Snowflake 需要額外的機器 / 數據中心配置。
xid (github.com/rs/xid) 是一個基於 MongoDB ObjectID 算法的更輕量級、更高效的全局唯一 ID 生成庫,用於生成 12 字節的唯一 ID,特性:
-
更短:比 UUID 更短(12 字節 vs 16 字節)。
-
無需配置:不像 Snowflake 需要機器 ID。
-
時間排序:可以按時間順序存儲 / 查詢數據。
-
分佈式友好:包含 機器 ID 和 進程 ID,確保在多臺服務器上仍然唯一。
Go 語言實現,適用於 分佈式系統、日誌追蹤、數據庫主鍵 等場景。
安裝
go get -u github.com/rs/xid
基本使用
guid := xid.New()
fmt.Println(guid.String())
// Output:
// cus568ckm2g47f6e6rd0
獲取 ID 的元數據
fmt.Println(guid.Machine()) // 獲取機器 ID
fmt.Println(guid.Pid()) // 獲取進程 ID
fmt.Println(guid.Time()) // 獲取時間戳
fmt.Println(guid.Counter()) // 獲取計數器
ID 結構由 4 部分組成
-
時間戳(4 字節):Unix 時間,精確到秒。
-
機器 ID(3 字節):唯一標識運行的機器。
-
進程 ID(2 字節):標識進程,避免衝突。
-
計數器(3 字節):從隨機數開始,每次遞增。
這樣,同一秒內,每個進程最多可生成 16,777,216 個唯一 ID。其字符串表示形式採用 base32hex(無填充),長度爲 20 個字符,例如:cus568ckm2g47f6e6rd0
。
你在項目中是否使用 xid?歡迎分享你的經驗!😊
References
https://github.com/rs/xid
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/XmBJ3wmumZlqGDV7yxmfHg