Skip to content

A concurrent-safe lock-free implementation of snowflake algorithm in Golang

License

Notifications You must be signed in to change notification settings

yankeguo/snowid

Repository files navigation

snowid

workflow badge Go Reference codecov

A concurrent-safe lock-free implementation of snowflake algorithm in Golang

Install

go get -u github.com/yankeguo/snowid

Usage

// create an unique identifier
id, _ := strconv.ParseUint(os.Getenv("WORKER_ID"), 10, 64)

// create an instance (a sonyflake like instance)
s := snowid.New(snowflake.Options{
    Epoch: time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC),
    ID: id,
    Grain: time.Millisecond*10,
    LeadingBit: true,
})

// get a id
s.NewID()

// stop and release all related resource
s.Stop()

Performance

Less than 1us/op on Apple MacBook Air (M1)

goos: darwin
goarch: arm64
pkg: github.com/yankeguo/snowid
BenchmarkGenerator_NewID-8       2465515               469.5 ns/op
PASS
ok      github.com/yankeguo/snowid       1.742s

Credits

GUO YANKE, MIT License

About

A concurrent-safe lock-free implementation of snowflake algorithm in Golang

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Languages

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy