雪花算法简介

简介: - SnowFlake 算法- 是 Twitter 开源的分布式 id 生成算法。

一:概述


- SnowFlake 算法

- 是 Twitter 开源的分布式 id 生成算法。

- 应用场景

- 高性能的产生不重复 ID,支持集群的横向扩展。

二:原理


- 其核心思想就是:

- 使用一个 64 bit 的 long 型的数字作为全局唯一 id。

- 在分布式系统中的应用十分广泛,且 ID 引入了时间戳,基本上保持自增的。

- 产生公式

-  | 0 (最高位预留) | 时间戳 (41 位) | 机器 ID (10 位) | 随机序列 (12 位) |

- 形成 64 位 bit

三:实现解析


- 0 (最高位预留)

- 因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。

- 时间戳 (41 位)

- 41 bits 的 Timestamp,每次要生成一个新 ID 的时候,都会获取一下当前的 Timestamp, 保证每个 timestamp 都是不同的。

- 机器 ID (10 位)

- 10 bits 的机器号,在 ID 分配 Worker 启动的时候,从一个 集群获取 (保证所有的 Worker 不会有重复的机器号)。

- 随机序列 (12 位)

- 12 bit 随机数。

- 组成 64 位 bits,成为 10 进制的 16 位 unique Id

四:代码简单实现


<?php
/**
 * 雪花算法
 *    其核心思想就是:
 *    使用一个 64 bit 的 long 型的数字作为全局唯一 id。
 *    在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的。
 * 产生公式
 *    | 0(最高位预留) | 时间戳(41位) | 机器ID(10位) | 随机序列(12位) |
 */
class IdCreate
{
    const max12bit = 4095;
    public static function createOnlyId()
    {
        // 获取微秒时间戳(42位),截取并转化为 41位二进制
        $microtime = decbin(floor(microtime(true) * 1000));
        // 10bit 的机器号,由集群产出
        $machineId = self::machine();
        // 12bit 的随机数
        $random = str_pad(decbin(mt_rand(0, self::max12bit)), 12, "0", STR_PAD_LEFT);
        // 拼接
        $base = '0' . $microtime . $machineId . $random;
        // 十进制 返回
        return bindec($base);
    }
    /**
     * 集群
     * @param int $machineId
     * @return string
     */
    public static function machine($machineId = 0)
    {
        return str_pad($machineId, 10, "0", STR_PAD_LEFT);
    }
}
$cast_id = IdCreate::createOnlyId();
var_dump($cast_id);
相关文章
|
2月前
|
算法
雪花算法id生成器
雪花算法id生成器
145 0
|
2月前
|
存储 算法 安全
【加密算法】AES对称加密算法简介
【加密算法】AES对称加密算法简介
|
2月前
|
算法 Java
雪花算法生成id
雪花算法生成id
|
2月前
|
机器学习/深度学习 算法 安全
【加密算法】RSA非对称加密算法简介
【加密算法】RSA非对称加密算法简介
|
2月前
|
机器学习/深度学习 算法 TensorFlow
机器学习算法简介:从线性回归到深度学习
【5月更文挑战第30天】本文概述了6种基本机器学习算法:线性回归、逻辑回归、决策树、支持向量机、随机森林和深度学习。通过Python示例代码展示了如何使用Scikit-learn、statsmodels、TensorFlow库进行实现。这些算法在不同场景下各有优势,如线性回归处理连续值,逻辑回归用于二分类,决策树适用于规则提取,支持向量机最大化类别间隔,随机森林集成多个决策树提升性能,而深度学习利用神经网络解决复杂模式识别问题。理解并选择合适算法对提升模型效果至关重要。
192 4
|
4天前
|
算法 数据中心 Python
基于python雪花算法工具类Snowflake-来自chatGPT
基于python雪花算法工具类Snowflake-来自chatGPT
15 4
|
4天前
|
算法 Java
基于java雪花算法工具类SnowflakeIdUtils-来自chatGPT
基于java雪花算法工具类SnowflakeIdUtils-来自chatGPT
12 3
|
4天前
|
算法 PHP 数据中心
基于php雪花算法工具类Snowflake -来自chatGPT
基于php雪花算法工具类Snowflake -来自chatGPT
12 2
|
4天前
|
算法 数据中心 C++
基于C++雪花算法工具类Snowflake -来自chatGPT
基于C++雪花算法工具类Snowflake -来自chatGPT
9 1
|
2月前
|
XML 存储 缓存
记一次雪花算法遇到的 生产事故!
最近生产环境遇到一个问题: 现象:创建工单、订单等地方,全都创建数据失败。 初步排查:报错信息为duplicate key,意思是保存数据的时候,报主键 id 重复,而这些 id 都是由雪花算法生成的,按道理来说,雪花算法是生成分布式唯一 ID,不应该生成重复的 ID。
102 5