基于php雪花算法工具类Snowflake -来自chatGPT

<?phpclass Snowflake {// 定义Snowflake算法的各个参数private $workerIdBits = 5;private $datacenterIdBits = 5;private $sequenceBits = 12;private $workerIdShift;private $datacenterIdShift;private $timestampLeftShift;private $maxWorkerId;private $maxDatacenterId;private $sequenceMask;private $workerId;private $datacenterId;private $sequence = 0;private $lastTimestamp = -1;public function __construct($workerId, $datacenterId) {// 计算位偏移量$this->workerIdShift = $this->sequenceBits;$this->datacenterIdShift = $this->sequenceBits + $this->workerIdBits;$this->timestampLeftShift = $this->sequenceBits + $this->workerIdBits + $this->datacenterIdBits;// 计算最大ID$this->maxWorkerId = -1 ^ (-1 << $this->workerIdBits);$this->maxDatacenterId = -1 ^ (-1 << $this->datacenterIdBits);$this->sequenceMask = -1 ^ (-1 << $this->sequenceBits);// 初始化参数$this->workerId = $workerId;$this->datacenterId = $datacenterId;}// 生成下一个唯一IDpublic function generateId() {// 获取当前时间戳(毫秒级)$timestamp = floor(microtime(true) * 1000);// 如果当前时间小于上次生成ID的时间戳,则抛出异常if ($timestamp < $this->lastTimestamp) {throw new Exception("Invalid system clock!");}// 如果当前时间戳与上次时间戳相同,则自增序列号if ($timestamp == $this->lastTimestamp) {$this->sequence = ($this->sequence + 1) & $this->sequenceMask;// 如果序列号等于0,则需要进入下一毫秒重新生成IDif ($this->sequence == 0) {$timestamp = $this->waitNextMillis($this->lastTimestamp);}} else {$this->sequence = 0;}// 保存最后生成ID的时间戳$this->lastTimestamp = $timestamp;// 生成最终的唯一ID$uniqueId = (($timestamp << $this->timestampLeftShift) |($this->datacenterId << $this->datacenterIdShift) |($this->workerId << $this->workerIdShift) |$this->sequence);return $uniqueId;}// 阻塞到下一个毫秒,直到获得新的时间戳private function waitNextMillis($lastTimestamp) {$timestamp = floor(microtime(true) * 1000);while ($timestamp <= $lastTimestamp) {usleep(1000);$timestamp = floor(microtime(true) * 1000);}return $timestamp;}
}// 测试方法
$snowflake = new Snowflake(1, 1);
for ($i = 0; $i < 10; $i++) {$uniqueId = $snowflake->generateId();echo $uniqueId . "\n";
}?>

在上述代码中,我们创建了一个名为Snowflake的类,该类用于生成Snowflake算法的唯一ID。它具有以下主要属性和方法:

  • __construct($workerId, $datacenterId):初始化Snowflake算法的参数,包括工作节点ID(workerId)和数据中心ID(datacenterId)。
  • generateId():生成下一个唯一ID。
  • waitNextMillis($lastTimestamp):阻塞到下一个毫秒,直到获得新的时间戳。

在测试方法中,我们创建了一个Snowflake实例,并使用其generateId()方法生成了10个唯一ID,并打印出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“Why Should I Trust You?” Explaining the Predictions of Any Classifier阅读笔记

“Why Should I Trust You?” Explaining the Predictions of Any Classifier阅读笔记 1. 论文贡献2. 背景 [ 1 ] ^{[1]} [1]3. LIME解释单个样本3.1 总体思想3.2 构建可解释的数据表示 [ 1 ] ^{[1]} [1]3.3 可解释性和忠实度的权衡3.4 局部采样3.5 稀疏线性解释3.6 使用SVM进…

无人机航测技术有何特点?主要应用在哪些方面?

无人机航测是航空摄影测量的一种&#xff0c;主要面向低空遥感领域&#xff0c;具有成本低、快速高效、适用范围广等特点。目前&#xff0c;无人机航测主要应用于地形测绘、城市数字化建设、工程建设等方面。 无人机航测技术的特点 1、作业成本低 传统的人工测量技术主要利用…

2023 年牛客多校第六场题解

A Tree 题意&#xff1a;给定 n n n 个点的一棵边带权的树&#xff0c;点有黑白二色&#xff08; 0 , 1 0,1 0,1 表示&#xff09;&#xff0c;现在可以以 a i a_i ai​ 的价值翻转第 i i i 个点的颜色&#xff0c;一对异色点 ( u , v ) (u,v) (u,v) 的价值为树上路径的最…

视频监控汇聚平台EasyCVR视频分享页面WebRTC流地址播放不了是什么原因?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…

spring框架的配置方案

spring框架在使用过程中&#xff0c;需要对它进行一系列的配置才可以使用&#xff0c;在spring发展过程中&#xff0c;配置方式也发生了一些变化&#xff1a; 2.5版本前>xml 2.5版本后>annonationxml 3.0版本后>annonationjavaConfig配置类 目录 2.5版本前&#xff1a…

AI绘图实战(十二):让AI设计LOGO/图标/标识 | Stable Diffusion成为设计师生产力工具

S&#xff1a;AI能取代设计师么&#xff1f; I &#xff1a;至少在设计行业&#xff0c;目前AI扮演的主要角色还是超级工具&#xff0c;要顶替&#xff1f;除非甲方对设计效果无所畏惧~~ 预先学习&#xff1a; 安装及其问题解决参考&#xff1a;《Windows安装Stable Diffusion …

百度UEditor编辑器如何关闭抓取远程图片功能

百度UEditor编辑器如何关闭抓取远程图片功能 这个坑娘的功能&#xff0c;开始时居然不知道如何触发&#xff0c;以为有个按钮&#xff0c;点击一下触发&#xff0c;翻阅了文档&#xff0c;没有发现&#xff0c;然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发&a…

华为数通HCIA-华为VRP系统基础

什么是VRP? VRP是华为公司数据通信产品的通用操作系统平台&#xff0c;作为华为公司从低端到核心的全系列路由器、以太网交换机、业务网关等产品的软件核心引擎。 VRP提供以下功能&#xff1a; 实现统一的用户界面和管理界面 实现控制平面功能&#xff0c;并定义转发平面接口…

[数据集][目标检测]遛狗不牵绳数据集VOC格式-1980张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1980 标注数量(xml文件个数)&#xff1a;1980 标注类别数&#xff1a;5 标注类别名称:["dog","p…

yo!这里是STL::vector类简单模拟实现

目录 前言 重要接口模拟实现 默认成员函数 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符重载 迭代器 简单接口 1.size() 2.capacity() 3.swap() 操作符重载 1.操作符[] 扩容接口 1.reserve() 2.resize() 增删查改接口 1.push_back() 2.pop_back() …

大数据Flink(五十五):Flink架构体系

文章目录 Flink架构体系 一、 Flink中的重要角色 二、Flink数据流编程模型 三、Libraries支持

Flutter Flar动画实战

在Flare动面出现之前,Flare动画大体可以分为使用AnimationController控制的基础动画以及使用Hero的转场动画,如果遇到一些复杂的场景,使用这些动画方案实现起来还是有难度的。不过,随着Flutter开始支持Flare矢量动面,Flutter的动画开发也变得越来越简单。事实上,Flare动画…

实现天气预报走势图

实现效果&#xff1a; 这里我用的天气接口是网上开源的&#xff0c;可以自己找一下。 稍微简单封装了一下axiso以及接口 封装的axios&#xff1a; // import { useUserStore } from /stores/user import axios from axios import router from /router import { ElMessage } f…

9 多进程编程

文章目录 进程以及状态进程进程的状态linux下的进程管理pstopbgkillcrontab 进程的创建两个while同时运行示例获取进程pidProcess 结构给子进程指定的函数传递参数进程间是否共享全局变量补充 进程间通信-Queue常用操作Queue 实例 管道通信&#xff08;了解&#xff09;样例 进…

问题:idea启动项目错误提示【command line is too long. shorten command line】

问题&#xff1a;idea启动项目错误提示【command line is too long. shorten command line】 参考博客 问题描述 启动参数过长&#xff0c;启动项目&#xff0c;错误提示 原因分析 出现此问题的直接原因是&#xff1a;IDEA集成开发环境运行你的“源码”的时候&#xff08…

python机器学习(六)决策树(上) 构造树、信息熵的分类和度量、信息增益、CART算法、剪枝

决策树算法 模拟相亲的过程&#xff0c;通过相亲决策图&#xff0c;男的去相亲&#xff0c;会先选择性别为女的&#xff0c;然后依次根据年龄、长相、收入、职业等信息对相亲的另一方有所了解。 通过决策图可以发现&#xff0c;生活中面临各种各样的选择&#xff0c;基于我们的…

vue动态绑定多个class以及带上三元运算或其他条件

在Vue中&#xff0c;有多种方法可以动态添加样式。下面介绍几种常用的方法&#xff1a; 1. 使用动态绑定的方式&#xff1a; 可以使用:style指令将一个对象作为值传递给它&#xff0c;对象的属性名表示要设置的样式属性&#xff0c;属性值表示要设置的样式值。例如&#xff1…

网络安全 Day26-PHP 简单学习

PHP 简单学习 1. 为什么要学习PHP2. PHP语法3. php 变量4. 字符串数据5. PHP 函数6. 数组 1. 为什么要学习PHP php存量多开源软件多很多安全流程 渗透方法 sql注入基于PHP语言入门简单 2. PHP语法 格式: <?php 内容?>或<?内容?>结尾分号例子<?php phpin…

ES智能推荐

用 ElasticSearch 实现 “猜你喜欢” 智能推荐_elasticsearch 推荐算法_程序员刘一二的博客-CSDN博客 个性化推荐系统从0到1-腾讯云开发者社区-腾讯云 ElasticSearch学习29_基于Elasticsearch实现搜索推荐_Wang_Zhenwei的博客-CSDN博客 https://github.com/IBM/elasticsearch-…

Stable Diffusion - SDXL 1.0 全部样式设计与艺术家风格的配置与提示词

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132072482 来源于 Anna Dittmann 安娜迪特曼&#xff0c;艺术家风格的图像&#xff0c;融合幻想、数字艺术、纹理等样式。 SDXL 是 Stable Diffus…