#snowflake-id #id-generator #id #snowflake #distributed #flake #codec

flaken

可配置位宽的雪花 ID 生成器、编码器、解码器

3 个版本

使用旧的 Rust 2015

0.2.2 2016年10月1日
0.2.1 2016年8月11日
0.2.0 2016年8月11日

#8#flake

MIT 许可证

8KB
145

Flaken

Build Status Coverage Status

一个64位雪花 ID 生成器、编码器和解码器,允许设置64位编码 ID 的各个部分的位宽。

let mut flake = Flaken::default().node(10).epoch(0).bitwidths(48, 12);
let id = flake.next();
let (timestamp, node, seq) = flake.decode(id);
assert!(timestamp > 0);
assert_eq!(node, 10);
assert_eq!(seq, 0);
assert_eq!(flake.encode(timestamp, node, seq), id);

lib.rs:

Flaken 是一个可配置的雪花 ID 生成器,可以调整默认值中的纪元和位宽。从实例化生成器生成的 ID 始终会增加。如果创建 ID 生成器后时钟从先前创建的 ID 向后移动,则可能出现冲突的 ID 值,否则时钟变化不会影响 ID 生成。

编码和解码示例

use std::time;
use flaken::Flaken;

let ts = time::SystemTime::now().duration_since(time::UNIX_EPOCH).unwrap();
let ts_ms = ts.as_secs()*1000 + (ts.subsec_nanos() as u64)/1000000;
let mf = Flaken::default();
let id = mf.encode(ts_ms, 10, 100);
let (ts0, node0, seq0) = mf.decode(id);
assert_eq!(ts0, ts_ms);
assert_eq!(node0, 10);
assert_eq!(seq0, 100);

ID 生成示例

use flaken::Flaken;

let mut flake = Flaken::default().node(1).epoch(0).bitwidths(40, 10);
let id0 = flake.next();
let (ts0, node0, seq0) = flake.decode(id0);
assert!(ts0 > 0);
assert_eq!(node0, 1);
assert_eq!(seq0, 0);
assert_eq!(flake.encode(ts0, node0, seq0), id0);

无运行时依赖