9个版本 (4个破坏性更改)
0.5.0 | 2023年2月27日 |
---|---|
0.4.2 | 2023年2月19日 |
0.3.2 | 2023年1月10日 |
0.2.0 | 2023年1月9日 |
0.1.0 | 2023年1月9日 |
#10 in #snowflake-id
18KB
299 行
Hexafreeze
一个用于异步生成雪花ID的库。
什么是雪花
雪花是由Twitter开发的,用于创建可排序的时间ID,即使在分布式计算集群中,也能快速生成,无需同步。
雪花具有以下布局
用法
首先,您需要包含依赖项。这些是推荐的功能。可以通过启用单个功能而不是 full
来减少Tokio的大小。
[dependencies]
hexafreeze = "0.5"
tokio = {version = "1", features = ["full"]}
Generator
是生成雪花的接口。雪花需要一个 epoch
,基本上是雪花的开始时间,它需要在过去,并且不到 ~ 69 年前。对于大多数应用程序,直到 2079 年,DEFAULT_EPOCH
应该是合适的。它是线程安全的,因此您不需要Mutex来包含它。建议在Rust应用程序的所有地方使用相同的生成器,例如,once_cell
可能很有用。
use hexafreeze::Generator;
use hexafreeze::DEFAULT_EPOCH;
#[tokio::main]
async fn main() {
// If your system is not distributed using `0` as the `node_id` is perfectly fine.
// The `DEFAULT_EPOCH` always needs to be dereferenced.
let gen = Generator::new(0, *DEFAULT_EPOCH).unwrap();
// The `generate` function is async and non-blocking.
let id: i64 = gen.generate().await.unwrap();
}
详细信息
- 与Twitter的参考实现不同,序列不会在每个毫秒重置。
依赖项
~4–12MB
~125K SLoC