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

站长工具之家seo查询云主机和云服务器的区别

站长工具之家seo查询,云主机和云服务器的区别,怎样查商标注册信息查询,wordpress 10万并发引言 雪花算法是Twitter开源的分布式ID生成算法,可以产生64位的ID。其中第一位是固定的正数标识,41位用于存储时间戳,剩下的为机器ID和序列号。通过时间戳、机器ID和序列号的组合,确保每个ID都是唯一的。 PHP代码 1、定义雪花算…

引言

雪花算法是Twitter开源的分布式ID生成算法,可以产生64位的ID。其中第一位是固定的正数标识,41位用于存储时间戳,剩下的为机器ID和序列号。通过时间戳、机器ID和序列号的组合,确保每个ID都是唯一的。

PHP代码

1、定义雪花算法类

class Snowflake
{private int $datacenterId; // 数据中心IDprivate int $machineId;    // 机器IDprivate int $sequence = 0; // 序列号private int $lastTimestamp = -1; // 上一个时间戳private const DATA_CENTER_ID_BITS = 5; // 数据中心ID所占位数private const MACHINE_ID_BITS = 5;      // 机器ID所占位数private const SEQUENCE_BITS = 12;        // 序列号所占位数private const MAX_DATA_CENTER_ID = -1 ^ (-1 << self::DATA_CENTER_ID_BITS);private const MAX_MACHINE_ID = -1 ^ (-1 << self::MACHINE_ID_BITS);private const TIMESTAMP_LEFT_SHIFT = self::SEQUENCE_BITS + self::MACHINE_ID_BITS + self::DATA_CENTER_ID_BITS;private const SEQUENCE_LEFT_SHIFT = self::MACHINE_ID_BITS + self::DATA_CENTER_ID_BITS;private int $epoch; // 起始时间戳public function __construct(int $datacenterId, int $machineId){if ($datacenterId < 0 || $datacenterId > self::MAX_DATA_CENTER_ID) {throw new Exception("数据中心ID超出范围");}if ($machineId < 0 || $machineId > self::MAX_MACHINE_ID) {throw new Exception("机器ID超出范围");}$this->datacenterId = $datacenterId;$this->machineId = $machineId;$this->epoch = 1609430400000; // 自定义起始时间(例如2021年1月1日)}public function nextId(): int{$timestamp = $this->currentTimeMillis();if ($timestamp < $this->lastTimestamp) {throw new Exception("错误:系统时钟发生回拨");}if ($this->lastTimestamp === $timestamp) {$this->sequence = ($this->sequence + 1) & ((1 << self::SEQUENCE_BITS) - 1);if ($this->sequence === 0) {$timestamp = $this->waitNextMillis($timestamp);}} else {$this->sequence = 0;}$this->lastTimestamp = $timestamp;return (($timestamp - $this->epoch) << self::TIMESTAMP_LEFT_SHIFT) |($this->datacenterId << self::SEQUENCE_LEFT_SHIFT) |($this->machineId << self::SEQUENCE_BITS) |$this->sequence;}private function waitNextMillis(int $lastTimestamp): int{$timestamp = $this->currentTimeMillis();while ($timestamp <= $lastTimestamp) {$timestamp = $this->currentTimeMillis();}return $timestamp;}private function currentTimeMillis(): int{return (int)(microtime(true) * 1000);}
}

2、创建实例生成ID

// 创建雪花算法实例
$datacenterId = 1; // 数据中心ID
$machineId = 1;    // 机器ID
$snowflake = new Snowflake($datacenterId, $machineId);// 生成用户ID的示例
for ($i = 0; $i < 10; $i++) {$userId = $snowflake->nextId();echo "生成的用户ID: $userId"."<br/>";
}

3、查看生成结果

生成的用户ID: 507485100926047232
生成的用户ID: 507485100926047233
生成的用户ID: 507485100926047234
生成的用户ID: 507485100926047235
生成的用户ID: 507485100926047236
生成的用户ID: 507485100926047237
生成的用户ID: 507485100926047238
生成的用户ID: 507485100926047239
生成的用户ID: 507485100926047240
生成的用户ID: 507485100926047241

结论

这段代码是一个比较完整的雪花算法实现,能够在分布式系统中生成高效、唯一的ID。通过合理的位移和位数分配,确保了在高并发情况下生成的ID也不会重复。

实际部署中,只需修改$datacenterId = 1; // 数据中心ID 以及 $machineId = 1; // 机器ID,即可实现分布式生成不重复的ID。

http://www.yayakq.cn/news/206304/

相关文章:

  • 无棣做网站可以做描文本的网站
  • 邳州市建设局官方网站金华网站建设电话
  • 怎么做win10原版系统下载网站ps如何做网页
  • 温州建设集团有限公司网站益阳有专做网站的吗
  • 东莞网站建设总结网站与建设的字体间距
  • 做网站app需要多少钱北京贸易公司网站制作
  • 网站刷链接怎么做的手机网站设计制作公司
  • 我们的爱情网站制作网络营销推广方案ppt
  • 采购黑帽seo
  • 公司内部网站如何备案wordpress 显示视频播放
  • 网站风格设计做一网站要什么时候开始
  • 南昌有没有做企业网站和公司网站源码上传图片出错
  • 中国icp备案的有多少企业网站多用户旅游网站开发
  • 搞定设计网站做的图怎么下载不了浅谈阿里企业的电子网站建设
  • 金融类网站模板网站开发的经济效益分析
  • 南京网页网站制作阿里巴巴法拍房官网
  • 设计素材网站收益wordpress面包屑导航不要子分类
  • 郑州影楼网站建设30天网站建设实录素材
  • 大连网站建设哪家好学历提升机构的套路
  • 企业网站群建设模式莆田建站培训
  • 网站开发服务公司杭州网站优化平台
  • 建设公司网站费用怎么做账网站三要素怎么做
  • 服务于中小企业建网站点击器原理
  • 能不能同行网站做站长统计南召微网站开发
  • 网站首页没收录有没有免费手游代理
  • 怎么样做一个个人网站招远做网站联系电话
  • 做招聘网站的背景图片科协科普网站建设
  • 怎么做购物车网站网站联盟接口怎么做
  • 网站建设 英语词汇shtml怎么做网站
  • 罗湖商城网站建设哪家好网易企业邮箱exchange