一個比 UUID 快百倍的唯一 ID 生成器
前言
在遊戲開發中,我們經常要為 Request、物件或其它東西設定全域性唯一的 ID。常見的選擇有隨機數、時間戳、UUID、用 Redis 生成 ID 等,這些選擇要麼可能重複,要麼太慢,於是我開發了 WUID,一個極快的唯一 ID 生成器。
WUID 比 UUID 快 10-135 倍,比用 Redis 生成 ID 快 4600 倍。
核心設計
WUID 順序生成 64 位整數,其高 24 位是從外部儲存載入的,每次載入自動加 1。
目前支援的外部儲存包括:Redis、MySQL、MongoDB。
Benchmarks
BenchmarkWUID 100000000 10.3 ns/op 0 B/op 0 allocs/op
BenchmarkRand 50000000 24.6 ns/op 0 B/op 0 allocs/op
BenchmarkTimestamp 100000000 12.3 ns/op 0 B/op 0 allocs/op
BenchmarkUUID_V1 20000000 107 ns/op 0 B/op 0 allocs/op
BenchmarkUUID_V2 20000000 106 ns/op 0 B/op 0 allocs/op
BenchmarkUUID_V3 5000000 359 ns/op 144 B/op 4 allocs/op
BenchmarkUUID_V4 1000000 1376 ns/op 16 B/op 1 allocs/op
BenchmarkUUID_V5 3000000 424 ns/op 176 B/op 4 allocs/op
BenchmarkRedis 30000 46501 ns/op 176 B/op 5 allocs/op
BenchmarkSnowflake 5000000 244 ns/op 0 B/op 0 allocs/op
特點
- 速度極快
- 執行緒安全
- 保證在同一機房內唯一
- 保證跨越時間唯一
- 通過共享外部儲存或設定 Section ID,可實現全域性唯一
- 每秒可生成 1 億 ID
- 低 40 位即將用盡時自動獲取新的高 24 位
使用示例
import "github.com/edwingeng/wuid/redis"
// Setup
g := wuid.NewWUID("default", nil)
g.LoadH24FromRedis("127.0.0.1:6379", "", "wuid")
// Generate
for i := 0; i < 10; i++ {
fmt.Println(g.Next())
}
傳送門
https://github.com/edwingeng/wuid
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 分散式唯一 ID 生成器分散式
- 分散式唯一 ID 生成器 - IDGen分散式
- js如何生成唯一識別符號UUIDJS符號UI
- Laravel --實戰篇 UUID(唯一識別碼)LaravelUI
- python之uuid通用唯一識別符號模組PythonUI符號
- Android開發 - UUID 類通用唯一識別符號解析AndroidUI符號
- 【iOS】使用UUID+KeyChain記錄裝置唯一標識iOSUIAI
- PHP產生一個唯一IDPHP
- 探尋UUID的起源與奧秘:從時間戳到唯一標識UI時間戳
- ULID 與 UUID:用於 JavaScript 的可排序隨機 ID 生成器UIJavaScript排序隨機
- Spring Boot 工程整合全域性唯一ID生成器 VestaSpring Boot
- 全域性唯一ID(GUID)生成方案對比GUI
- 開發中常用工具 - 獲取裝置的唯一標識、UDID、UUID、keychain儲存UUID、判斷網路型別等UIAI型別
- iOS專案開發實戰——獲取當前的UUID(通用唯一識別碼)iOSUI
- android get uuid獲取uuidAndroidUI
- GTID 可以理解成資料庫服務的UUID 加上一個資料庫UI
- MySQL的UUIDMySqlUI
- uuidUI
- MySQL的server_uuid獲取之uuid()函式和uuid_short()函式MySqlServerUI函式
- 一個比 webpack 快10倍的打包工具Web
- 唯一索引和非唯一索引ROWID儲存的區別索引
- mount uuidUI
- oracle uuidOracleUI
- iOS獲取手機唯一識別符號來判斷不同終端登入(IDFA和UUID分析)iOS符號UI
- uuid的簡單使用UI
- 簡單獲取UUID 裝置唯一標示 應用刪除後裝置標示不變UI
- UUID和GUID的區別GUI
- UDID和UUID的區別UI
- UUID 和 GUID 的區別GUI
- 改個遊客的uuid,肝了3天bugUI
- 如何獲取Android唯一標識(唯一序列號)Android
- 每秒 50GB!科學家研究高頻傳輸比現有 WiFi 快百倍WiFi
- 【Java】生成UUIDJavaUI
- oracle生成uuidOracleUI
- 唯一index和非唯一index中leaf node裡rowid的一點區別。Index
- iOS UDID與UUIDiOSUI
- GUID UUID in Java SummaryGUIJava
- 修改安卓ID為硬體唯一ID安卓