使用雪花算法生成订单号

什么是雪花算法:

SnowFlake是Twitter公司采用的一种算法,目的是在分布式系统中产生全局唯一且趋势递增的ID

具有的特点:

雪花算法在分布式架构很常见,他的分布式id具有的特点:

1.全局唯一性:不能出现有重复的ID标识

2.递增性:确保生成ID对于用户或业务是递增的

3.高可用性:确保任何时候都能生成正确的ID

4.高性能性:在高并发的环境下依然表现良好

原理:

雪花算法是将一个64位的整数分成三个部分

1.41个比特位表示生成ID时的时间戳(精确到毫秒),所以理论上可以使用69年。

2.10个比特位表示当前机器的编号,所以理论上可以支持1024台机器。

3.12个比特位表示当前时间戳下已生成的雪花ID数量,所以理论上一毫秒内可以产生4096个不同的ID。


php实现代码

public static function createID(){

    //假设一个机器id

    $machineId = 1234567890;

    //41bit timestamp(毫秒)

    $time = floor(microtime(true) * 1000);

    //0bit 未使用

    $suffix = 0;

    //datacenterId  添加数据的时间

    $base = decbin(pow(2,40) - 1 + $time);

    //workerId  机器ID

    $machineid = decbin(pow(2,9) - 1 + $machineId);

    //毫秒类的计数

    $random = mt_rand(1, pow(2,11)-1);

    $random = decbin(pow(2,11)-1 + $random);

    //拼装所有数据

    $base64 = $suffix.$base.$machineid.$random;

    //将二进制转换int

    $base64 = bindec($base64);

    $id = sprintf('%.0f', $base64);

    return $id;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容