一个比 UUID 快百倍的唯一 ID 生成器

edwingeng · · 2608 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

在游戏开发中,我们经常要为请求、对象或者什么其它东西设置全局唯一的 ID。常见的选择有随机数、时间戳、UUID、用 Redis 生成 ID 等,这些选择要么可能重复,要么太慢,于是我开发了 WUID,一个极快的唯一 ID 生成器。

WUID 比 UUID 快 100 倍,比用 Redis 生成 ID 快 4600 倍。

核心设计

WUID 顺序生成 64 位整数,其高 24 位是从外部存储加载的,每次加载自动加 1。

目前支持的外部存储包括:Redis、MySQL、MongoDB。

Benchmarks

BenchmarkWUID           200000000            9.38 ns/op        0 B/op          0 allocs/op
BenchmarkWUID-4         200000000            9.19 ns/op        0 B/op          0 allocs/op
BenchmarkRand           100000000           21.6  ns/op        0 B/op          0 allocs/op
BenchmarkRand-4         100000000           21.9  ns/op        0 B/op          0 allocs/op
BenchmarkTimestamp        2000000          669    ns/op        0 B/op          0 allocs/op
BenchmarkTimestamp-4      2000000          664    ns/op        0 B/op          0 allocs/op
BenchmarkUUID_V1          2000000          888    ns/op        0 B/op          0 allocs/op
BenchmarkUUID_V1-4        2000000          871    ns/op        0 B/op          0 allocs/op
BenchmarkUUID_V2          2000000          904    ns/op        0 B/op          0 allocs/op
BenchmarkUUID_V2-4        2000000          887    ns/op        0 B/op          0 allocs/op
BenchmarkUUID_V4          1000000         1325    ns/op       16 B/op          1 allocs/op
BenchmarkUUID_V4-4        1000000         1287    ns/op       16 B/op          1 allocs/op
BenchmarkRedis              30000        43970    ns/op      176 B/op          5 allocs/op
BenchmarkRedis-4            30000        42279    ns/op      176 B/op          5 allocs/op

特点

  • 速度极快
  • 线程安全
  • 保证在同一机房内唯一
  • 保证跨越时间唯一
  • 低 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


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:edwingeng

查看原文:一个比 UUID 快百倍的唯一 ID 生成器

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2608 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传