之前有人问我设计一个分布式的递增的唯一id生成。想了半天不知道,偶然一个同事说起snowflake算法,我百度了一下,很简单高效。
参考
https://github.com/twitter/snowflake
于是,我自己用c语言随便实现了一下,还没有达到工业级别,需要细化,但是基本能用了,上代码。
- /*
- snowflake
- ID 生成策略
- 毫秒级时间41位+机器ID 10位+毫秒内序列12位。
- 0 41 51 64 +-----------+------+------+ |time |pc |inc | +-----------+------+------+
- 前41bits是以微秒为单位的timestamp。
- 接着10bits是事先配置好的机器ID。
- 最后12bits是累加计数器。
- macheine id(10bits)标明最多只能有1024台机器同时产生ID,sequence number(12bits)也标明1台机器1ms中最多产生4096个ID, *
- 注意点,因为使用到位移运算,所以需要64位操作系统,不然生成的ID会有可能不正确
- */
- #include <stdio.h>
- #include <pthread.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <sched.h>