嘿小伙伴们👋🏻,今天要跟大家安利一个超级实用的编程小知识:如何用PHP实现雪花算法来生成独一无二的ID🎢!听起来是不是很高大上呀?别担心,其实操作起来一点也不复杂哦~ 跟着我一起来学习一下吧👩💻!首...
嘿小伙伴们👋🏻,今天要跟大家安利一个超级实用的编程小知识:如何用PHP实现雪花算法来生成独一无二的ID🎢!听起来是不是很高大上呀?别担心,其实操作起来一点也不复杂哦~ 跟着我一起来学习一下吧👩💻!
首先呢,咱们得知道什么是“雪花算法”。简单来说,它是由Twitter开发的一种分布式ID生成方案,能够保证在不同机器上同时生成不重复的长整型数字序列。就像每一片雪花都是独一无二的一样美丽❄️💫,每个通过此算法产出的ID也是独一无二哒~
那么具体怎么做呢?别急,这就教你一步步搭建属于自己的PHP版雪花算法框架💪🏼:
环境准备:确保你的电脑上已经安装了PHP环境。如果没有的话,可以先去官网下载最新版安装包进行安装哟🛠️。
编写代码:接下来就是见证奇迹的时刻啦!打开你喜欢的IDE(比如VSCode或Sublime Text),新建一个php文件,命名为snowflake_id.php,然后按照下面的示例填写内容:
<?php
class Snowflake {
private $twepoch = 1288834974657; // 开始时间戳 (2010-11-04)
private $datacenterIdBits = 5; // 数据中心ID位数
private $workerIdBits = 5; // 机器ID位数
private $maxDatacenterId = -1 ^ (-1 << $datacenterIdBits);
private $maxWorkerId = -1 ^ (-1 << $workerIdBits);
private $sequenceBits = 12; // 序列号位数
private $workerIdShift = $sequenceBits;
private $datacenterIdShift = $sequenceBits + $workerIdBits;
private $timestampLeftShift = $sequenceBits + $workerIdBits + $datacenterIdBits;
private $sequenceMask = -1 ^ (-1 << $sequenceBits);
private $lastTimestamp = -1;
private $sequence = 0;
private $datacenterId;
private $workerId;
public function __construct($datacenterId, $workerId) {
if ($datacenterId > $this->maxDatacenterId || $datacenterId < 0) {
throw new Exception("DataCenter Id can't be greater than {} or less than 0", $this->maxDatacenterId);
}
if ($workerId > $this->maxWorkerId || $workerId < 0) {
throw new Exception("Worker Id can't be greater than {} or less than 0", $this->maxWorkerId);
}
$this->datacenterId = $datacenterId;
$this->workerId = $workerId;
}
public function getNextId() {
$timestamp = $this->timeGen();
if ($timestamp < $this->lastTimestamp) {
throw new Exception('Clock moved backwards. Refusing to generate id');
}
if ($this->lastTimestamp == $timestamp) {
$this->sequence = ($this->sequence + 1) & $this->sequenceMask;
if ($this->sequence == 0) {
$timestamp = $this->tilNextMillis($this->lastTimestamp);
}
} else {
$this->sequence = 0;
}
$this->lastTimestamp = $timestamp;
return ($this->sequence << $this->sequenceBits | $this->datacenterId << $this->datacenterIdShift | $this->workerId << $this->workerIdShift | $timestamp << $this->timestampLeftShift);
}
protected function tilNextMillis($lastTimestamp) {
$timestamp = $this->timeGen();
while ($timestamp <= $lastTimestamp) {
$timestamp = $this->timeGen();
}
return $timestamp;
}
protected function timeGen() {
return floor(microtime(true) * 1000);
}
}运行测试:保存好文件之后,在命令行中使用php snowflake_id.php命令来执行脚本试试看吧!如果一切正常的话,你应该可以看到一串长长的数字被打印出来啦!这就是你的第一个由PHP+雪花算法生成的独特ID哦🎉🥳!
通过上面简单的几步操作,你就掌握了使用PHP语言实现雪花算法的方法啦!是不是觉得还挺有趣的呢?如果你对这个话题感兴趣或者有任何疑问的话,欢迎留言交流哦💬~希望今天的分享对你有所帮助,记得给我点赞+关注哦💖🌈!