php idwork,idwork.php
/**
* ID 生成策略
* 毫秒级时间41位+机器ID 10位+毫秒内序列12位。
* 0 41 51 64
+-----------+------+------+
|time |pc |inc |
+-----------+------+------+
* 前41bits是以微秒为单位的timestamp。
* 接着10bits是事先配置好的机器ID。
* 最后12bits是累加计数器。
* macheine id(10bits)标明最多只能有1024台机器同时产生ID,sequence number(12bits)也标明1台机器1ms中最多产生4096个ID,
*
* auth: zhouyuan
*/
class idwork
{
const debug = 1;
static $workerId;
static $twepoch = 1361775855078;
static $sequence = 0;
const workerIdBits = 4;
static $maxWorkerId = 15;
const sequenceBits = 10;
static $workerIdShift = 10;
static $timestampLeftShift = 14;
static $sequenceMask = 1023;
private static $lastTimestamp = -1;
function __construct($params){
$workId = $params['workId'];
if($workId > self::$maxWorkerId || $workId< 0 )
{
throw new Exception("worker Id can't be greater than 15 or less than 0");
}
self::$workerId=$workId;
}
function timeGen(){
//获得当前时间戳
$time = explode(' ', microtime());
$time2= substr($time[0], 2, 3);
return $time[1].$time2;
}
function tilNextMillis($lastTimestamp) {
$timestamp = $this->timeGen();
while ($timestamp <= $lastTimestamp) {
$timestamp = $this->timeGen();
}
return $timestamp;
}
function nextId()
{
$timestamp=$this->timeGen();
if(self::$lastTimestamp == $timestamp) {
self::$sequence = (self::$sequence + 1) & self::$sequenceMask;
if (self::$sequence == 0) {
$timestamp = $this->tilNextMillis(self::$lastTimestamp);
}
} else {
self::$sequence = 0;
}
if ($timestamp < self::$lastTimestamp) {
throw new Excwption("Clock moved backwards. Refusing to generate id for ".(self::$lastTimestamp-$timestamp)." milliseconds");
}
self::$lastTimestamp = $timestamp;
$nextId = ((sprintf('%.0f', $timestamp) - sprintf('%.0f', self::$twepoch) )<< self::$timestampLeftShift ) | ( self::$workerId << self::$workerIdShift ) | self::$sequence;
return $nextId;
}
}
?>
一键复制
编辑
Web IDE
原始数据
按行查看
历史
php idwork,idwork.php相关推荐
- java idwork长度_java 字符串id
Java FutureTask import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.c ...
- Java项目:教务管理系统(java+JSP+Spring+SpringBoot+layui+maven)
源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 三角色教师 管理员,学生教务管理系统,包括院系管理,课题综合管理,信息管理,以及差旅管理,学生选题等等. 二.项目 ...
- Java项目:教材管理系统(java+SSM+jsp+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 管理员可以增删改查教材.教材商.入库教材.用户(用 户包括学生和教师)可以对教材商.教材进行.xcel的导入 导出 ...
- spring -- 自定义注解
我们直接通过代码解释自定义注解的使用及各个含义 package com.sysware.cloud.dts.annotation;import java.lang.annotation.*; @Ret ...
- Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:任务加油站 原文:toutiao.com/i6861 ...
- Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版
在分布式系统中,需要生成全局UID的场合还是比较多的,twitter的snowflake解决了这种需求,实现也还是很简单的,除去配置信息,核心代码就是毫秒级时间41位+机器ID 10位+毫秒内序列12 ...
- gradle官方文档_Spring Boot+Gradle+MyBatisPlus3.x搭建企业级的后台分离框架
你再主动一点点 我们就有故事了 原文:toutiao.com/i6861456496740270604 1.技术选型 解析器:FastJSON 开发工具:JDK1.8 .Gradle.IDEA 技 ...
- 分布式系统生成唯一主键
原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface 唯一ID在系统小的时候,随便整都可以,但是系统大了后呢?这个时候如果出现了问题,ID ...
- Golang工具集-String工具,时间工具,http工具等
gotool gotool是一个小而全的Golang工具集,主要是将日常开发中常用的到方法进行提炼集成,避免重复造轮子,提高工作效率,每一个方法都是作者经过工作经验,和从以往的项目中提炼出来的. 20 ...
最新文章
- java url json字符串_使用HttpClient将URL中的JSON查询字符串发送到Web服务(Java)
- Ubuntu Server如何配置SFTP
- 你真的清楚DateTime in C#吗?
- 如何把密度函数化为标准正态二维分布_概率微课:第三章(22) 二维随机变量及分布函数定义...
- Youki的装机日记~
- 如何安装配置CKEditor 3.0
- 隐马尔可夫模型HMM与维特比Veterbi算法(一)
- cnapckSurround c++builder Region 代码折叠快捷键
- easyui图标对照
- 佳博网口打印机驱动安装
- Android 运行程序报错:Unable to execute dex: Multiple dex files define Lcom/baidu/android/pushservice/Push
- python机器学习实战 getA()函数详解
- Spring中的AOP以及切入点表达式和各种通知
- OSGearth学习(一)
- 浙江大华2022届秋招 内推码306823
- 英语期刊写作-通往国际学术舞台的阶梯第七章答案
- easyrecovery使用教程,easyrecovery使用方法
- 怎么用python读.dat文件
- 专访|威威玮炜蜜汁同框的背后,看ofo小黄车的野心与坚持
- spring Enviroment
热门文章
- 文本挖掘(part6)--共现矩阵
- 文献记录(part65)--基于用户聚类的异构社交网络推荐算法
- 文献记录(part20)--Discriminative metric learning for multi-view graph partitioning
- sklearn自学指南(part34)--K-means
- 文献记录(part14)--Biclustering with dominant sets
- 图示机器学习(part1)--机器学习与应用
- JavaScript入门(part3)--变量
- R语言观察日志(part1)--subset函数
- 《弗洛伊德及其后继者》读书笔记(part1)--西格蒙德·弗洛伊德与经典精神分析传统
- 向seaborn传递matplotlib绘图参数,精细地控制seaborn输出图形