当前位置: 首页 > news >正文

雪花算法简介

一:概述

- 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);

http://www.lryc.cn/news/58845.html

相关文章:

  • 人口普查数据集独热编码转换
  • 牛客过第二遍
  • 科普:java与JavaScript的区别
  • 【教程】Unity 与 Simence PLC 联动通讯
  • 视频编解码(一)之virtio-gpu环境搭建
  • JDBC概述三(批处理+事务操作+数据库连接池)
  • MappedByteBuffer 详解(图解+秒懂+史上最全)
  • 顶点程序经典案例——树木生长
  • 在云计算环境下保护Java应用程序的有效措施
  • vscode-markdown-代码片段及快捷键设置
  • ModelNet40数据集
  • 【都2023年了,还在问网络安全怎么入门】
  • Apple Xcode 14.3 (14E222b) 正式版发布下载
  • 【Linux】sar常用选项介绍
  • PHP 单笔转账到支付宝账户,支付宝公钥证书实现版本
  • 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 E 题
  • Python 小型项目大全 21~25
  • MinIO从信息泄漏到RCE
  • 202.Spark(九):SparkStreaming案例实操
  • GlusterFS(GFS)分布式文件系统
  • ChatGPT文本框再次升级,打造出新型操作系统
  • DPU02国产USB转UART控制芯片替代CP2102
  • Softing新版HART多路复用器软件支持西门子控制器
  • 〖Python网络爬虫实战⑫〗- XPATH语法介绍
  • 实例方法、类方法、静态方法、实例属性、类属性
  • 数据结构---二叉树
  • CMake——从入门到百公里加速6.7s
  • 无公网IP,在外公网远程访问RabbitMQ服务「内网穿透」
  • Node【二】NPM
  • 【2023最新】超详细图文保姆级教程:App开发新手入门(2)