任务要求毫秒生成10000个唯一ID

研究了下twitter/snowflake的算法思想:

参考了下网上雪花算法生成规则,把数据中心和机器编号整合一起,变成10位机器ID, 机器ID和序列号自动获取 理论上毫秒可生成 1024*4096个唯一ID

<?php
namespace app\common;
/****  雪花全局唯一 ID 生成类*  修改了机器id和序列号自动获取 理论上毫秒可生成 1024*4096个唯一id*  组成: <毫秒级时间戳+机器id+序列号>*  41bit的时间戳 可以支持该算法使用到2082年,*  10bit的机器id 可以支持1023台机器,*  12bit序列号   可以支持1毫秒产生4095个自增序列id**/
class Snowflake
{const EPOCH    = 1479533469598; //开始时间,固定一个小于当前时间的毫秒数const max12bit = 4095;const max41bit = 1099511627775;static $LAST_TIME_MID = 0; // 上次的机器idstatic $SEQUENCE_NUM  = 0; //public static function make(){// 时间戳 42字节$time = floor(microtime(true) * 1000);// 当前时间 与 开始时间 差值$time -= self::EPOCH;// 二进制的 毫秒级时间戳$base = decbin(self::max41bit + $time);// 获取序列数self::get_num();// 获取机器idself::get_mid();// 机器id  10 字节$machineId = str_pad(decbin(self::$LAST_TIME_MID), 10, "0", STR_PAD_LEFT);// 序列数 12字节$random = str_pad(decbin(self::$SEQUENCE_NUM), 12, "0", STR_PAD_LEFT);// 拼接$base = $base . $machineId . $random;if (strpos(PHP_OS, "WIN") !== false){//win下会科学计数 格式化return number_format(bindec($base), 0, '', ''); //输出16位id 4369796497932289}return bindec($base); // 输出19位id 4940315248386113537}//机器id 10字节 1-1023public static function get_mid(){if (self::$SEQUENCE_NUM >= self::max12bit){self::$LAST_TIME_MID++;if (self::$LAST_TIME_MID > 1023){self::$LAST_TIME_MID = 0;}}}//12字节 1-4095public static function get_num(){self::$SEQUENCE_NUM++;if (self::$SEQUENCE_NUM > self::max12bit){self::$SEQUENCE_NUM = 0;}}
}

测试使用

echo Snowflake::make();
// string(19) "5018983989168308224"

雪花算法及运用PHP,雪花算法生成全局唯一ID,参考了下网上雪花算法生成规则,机器ID和序列号自动获取 理论上毫秒可生成 1024*4096个唯一ID相关推荐

  1. 金融领域下的数据挖掘算法应用:智能推荐算法模型

    摩天,用友旗下社会化的企业数智化学习认证社区,提供数智营销.智慧医疗.数智金融.智能制造.项目管理等精品课程,数智化人才上摩天!https://mot.yonyou.com/ 你将会学到: 智能推荐系 ...

  2. 金融领域下的数据挖掘算法应用:逻辑回归模型

    摩天,用友旗下社会化的企业数智化学习认证社区,提供数智营销.智慧医疗.数智金融.智能制造.项目管理等精品课程,数智化人才上摩天!https://mot.yonyou.com/ 你将会学到: 股票客户流 ...

  3. 金融领域下的数据挖掘算法应用:XGboost模型

    摩天,用友旗下社会化的企业数智化学习认证社区,提供数智营销.智慧医疗.数智金融.智能制造.项目管理等精品课程,数智化人才上摩天!https://mot.yonyou.com/ 你将会学到: XGboo ...

  4. 金融领域下的数据挖掘算法应用:AdaBoost模型摩天

    摩天,用友旗下社会化的企业数智化学习认证社区,提供数智营销.智慧医疗.数智金融.智能制造.项目管理等精品课程,数智化人才上摩天!https://mot.yonyou.com/ 你将会学到: 你将会学到 ...

  5. Nginx + LUA下流量拦截算法

    前言 电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单.信誉分析,进而根据用户ip信誉权重做相应的流量拦截.限制流量. Nginx自身有的请求限制模块ngx_htt ...

  6. 织梦tag标签按照设定的栏目id获取相应的内容或自动获取相应栏目tag

    第一步:打开/include/taglib/tag.lib.php文件 第二部:在其大约62行加入以下代码: //程序修改新加start else if($getall==2) { $dsql-> ...

  7. Java工具类--雪花算法生成全局唯一ID

    import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...

  8. 分布式下使用雪花算法生成全局ID及解决时钟回拨问题

    简介 雪花算法是 64 位 的二进制,一共包含了四部分: 1位是符号位,也就是最高位,始终是0,没有任何意义,因为要是唯一计算机二进制补码中就是负数,0才是正数 41位是时间戳,具体到毫秒,41位的二 ...

  9. 雪花算法(snowflake) :分布式环境,生成全局唯一的订单号 | CSDN 博文精选

    戳蓝字"CSDN云计算"关注我们哦! 作者 |  琦彦  责编 | 阿秃 转自 | CSDN 博客 snowflake方案 snowflake是Twitter开源的分布式ID生成算 ...

最新文章

  1. wireshark: no interface can be used for capturing in this system
  2. kafka数据 落盘_Kafka架构原理?也就这么回事!
  3. tomcat线程循环异常终止_腾讯面试官:如何停止一个正在运行的线程?我一脸蒙蔽。。。...
  4. epoll的两种模式
  5. android组建之间通信_Android各组件/控件间通信利器之EventBus
  6. 容器编排技术  - Kubernetes kubectl convert 命令详解
  7. 补习系列(2)-springboot mime类型处理
  8. OpenGL立方体面的显示问题?
  9. vue 组件 not defined_Vue、Spring Boot开发小而完整的Web前后端分离项目实战10
  10. 高中数学立体几何证明套路高考试题(附答案)
  11. 【VREP】四舵轮(or n舵轮)自旋与平移融合运动解算
  12. Gradual warmup lr schedule--pytorch
  13. 服务器 ssd虚拟内存,有一说一:虚拟内存对比固态硬盘
  14. 10大主流压力/负载/性能测试工具推荐
  15. Nature reviews Neurology:癫痫合并神经行为障碍:基于网络的精确分类
  16. 万人千题第一阶段报告【待继续总结】
  17. linux游戏mod,星期五之夜迷你型岳父模组
  18. 书架 bookshelf
  19. 跨考西电计算机科学与技术专业介绍,2021年西安电子科技大学计算机科学与技术(081200)人工智能交叉研究方向_考研专业目录_考试科目_考试范围 - 学途吧...
  20. Hadoop 部署之 Hadoop (三)

热门文章

  1. selenium java 高级技巧篇(必学)美化测试报告(十三)
  2. 十年技改路,智造齿轮副
  3. 7-4 单链表基础应用(4)--单链表逆置
  4. java五子棋实验报告6,五子棋Java实验报告
  5. 剪贴板中html文件格式,HTML 剪贴板格式
  6. 根据文件数据,检测文件类型
  7. factorybean 声明_说说 Spring 框架中的 Factory Bean
  8. LINUX下的SD卡分区
  9. 婴儿柳条摩西篮出口美国CPC认证ASTM F2194测试标准介绍
  10. halcon学习笔记(二)轮廓