分布式全局唯一ID,snowflake的PHP,golang实现

By | 2018年9月7日

先说下 snowflake 的具体组成:

毫秒时间戳差值+机器编码+流水号

因为 php 不是常驻内存的,所以流水号是有问题的,这也是大多数 github 上的snowflake 的 php 实现的通病,我测试了几个,在大并发情况下,还是生成了同样的 id。所以我自己从新写了下。

github 地址:

PHP 版本:https://github.com/anerg2046/helper

Golang 版本:https://github.com/anerg2046/snowflake

PHP 版本的使用:

首先要安装:

然后就可以使用了

 

Golang 版本的使用

同样需要先安装

使用方法

跟 PHP 版本类似有3个参数可以进行设置

  • Epoch 设置一个小于当前时间的毫秒数,用于缩短时间位数
  • MaxMachineBit 最大的机器标识bit位数,默认是8,取值范围1-255,如果为0会忽略机器标识这一段
  • MaxSequenceBit 每毫秒内的流水号bit位数,默认是12,取值范围是0-4095

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.