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

MIT 许可证

18KB
299

Hexafreeze

一个用于异步生成雪花ID的库。

什么是雪花

雪花是由Twitter开发的,用于创建可排序的时间ID,即使在分布式计算集群中,也能快速生成,无需同步。

雪花具有以下布局

Snowflake ID layout

用法

首先,您需要包含依赖项。这些是推荐的功能。可以通过启用单个功能而不是 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