11 个版本 (4 个破坏性更新)

0.5.6 2020年1月13日
0.5.5 2020年1月9日
0.4.0 2020年1月6日
0.3.0 2020年1月6日
0.1.0 2020年1月6日

#12 in #uid

MIT 许可证

5KB
69 代码行数(不含注释)

snowflake-rust

Kubernetes "twitter" 雪崩。这不是发布版本,请不要在生产环境中使用。

默认情况下,原始 Twitter 雪崩格式定义了

  • 35 位用于存储自定义纪元,精度为10毫秒
  • 16 位用于存储 IP 地址的低16位
  • 12 位用于存储序列号

使用方法

将以下内容添加到您的 Cargo.toml


[dependencies]
snowflake-rust = "0.5.6"

并将其添加到您的 crate 根目录


use snowflake_rust;

示例


use snowflake_rust::Snowflake;

fn main() {
    let mut s = Snowflake::kubernetes();
    let id = s.generate().unwrap();
    println!("{:?}", id)
}

// singleton example
use snowflake_rust::Snowflake;

fn main() {
    let id = id().unwrap();
    println!("{:?}", id)
}

pub fn id() -> Option<i64> {
    let instance = get_instance();
    let mut sf = instance.lock().unwrap();
    sf.generate()
}

fn get_instance() -> Arc<Mutex<Snowflake>> {

    static mut SINGLETON: Option<Arc<Mutex<Snowflake>>> = None;

    unsafe {
        SINGLETON.get_or_insert_with( || {
            Arc::new(Mutex::new(Snowflake::kubernetes()))
        }).clone()
    }
}

依赖项

~1MB
~18K SLoC