DonkeyID---php扩展-64位自增ID生成器
##原理
参考Twitter-Snowflake 算法,扩展了其中的细节。具体组成如下图:
如图所示,64bits 咱们分成了4个部分。
- 毫秒级的时间戳,有42个bit.能够使用139年,从1970年开始计算,能使用到2109年,当然这些是可以扩展的,可以通知指定起始时间来延长这个日期长度。
- 自定义节点id,防止多进程运行产生重复id,占位12个bit,能够支持4096个节点。部署的时候可以配置好服务器id;
进程workerid,占位5bit,能够生成32个进程id。根据pid运算获得。(已经取消)- 进程内毫秒时间自增序号。占位10bit,一毫秒能产生1024个id。也就是说并发1秒能产生1024000个id。
###唯一性保证
100%唯一性保证,根据nodeid的不一样保证多服务器的唯一性,使用共享内存+自旋锁保证单节点多进程的唯一性 同一毫秒内自增变量保证并发的唯一性。
###安装DonkeyID扩展
cd /usr/local/php/include/php/ext sudo git clone https://github.com/osgochina/donkeyid.git cd /usr/local/php/include/php/ext/donkeyid/donkeyid sudo phpize sudo ./configure --with-php-config=/usr/local/php/bin/php-config sudo make && sudo make install
配置
在php.ini 中配置节点id
[DonkeyId] ;0-4095 donkeyid.node_id=0 ;0-当前时间戳 donkeyid.epoch=0
####api接口
- dk_get_next_id()
获取基于Snowflake算法的id
- dk_get_next_ids(num,num,time=0)
获取基于Snowflake算法的id列表.num:生成id的数量,num:生成id的数量,time:需要生成指定时间的id.$time 默认为0 生成当前时间指定数量的id
- dk_parse_id($id)
解析基于Snowflake算法的id元数据,返回值包括:time id生成时间,node_id 节点id,sequence 自增数
- dk_get_ts_id()
获取10进制的时间戳类型的id
- dk_get_ts_ids(num,num,time=0)
获取10进制的时间戳类型的id列表.num:生成id的数量,num:生成id的数量,time:需要生成指定时间的id.$time 默认为0 生成当前时间指定数量的id
- dk_parse_ts_id($tsid)
解析10进制的时间戳类型的id元数据,返回值包括:time id生成时间,node_id 节点id,sequence 自增数
- dk_get_dt_id()
获取字符串类型的id,显式包含日期时间属性
转载于:https://www.cnblogs.com/starfish29/p/11492548.html
DonkeyID---php扩展-64位自增ID生成器相关推荐
- Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake,64位自增ID算法详解 from: http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8 ...
- java 自定义自增_自定义全局自增ID生成器
看了网上很多生成自增ID的策略,最终给出的都是雪花算法,leaf算法.但是却没有满足咱们对于自定义生成规则的需求. 在业务上有一部分ID往往是有规则的,比如某个产品的订单号往往是"产品标志+ ...
- java id生成器 分布式_分布式高效唯一ID生成器(sequence)
分布式高效唯一ID生成器(sequence) 简介 高效GUID产生算法(sequence),基于Snowflake实现64位自增ID算法. Twitter-Snowflake算法产生的背景相当简单, ...
- flash player for linux 64,总算明白为什么Flash Player迟迟出不了64位版本了
终于明白为什么Flash Player迟迟出不了64位版本了 板子要打在macromedia身上,因为在那Internet的蛮荒岁月,macromedia为了尽可能的减少swf文件的尺寸,在一部分对象 ...
- 为什么64位计算机CPU架构叫amd64
x86 1978 年 6 月,Intel 发布了新款 16 位微处理器 8086,开创了一个全新时代,x86 架构由此诞生.x86 架构指的是特定微处理器执行的计算机语言指令集,定义了芯片的基本使用规 ...
- c++实现的唯一ID生成器
设计背景 用作游戏服务器给每个角色生成UID,给物品生成唯一ID,有多个服务器类型,例如:游戏服,中心服,网关服等等:每个类型的服务器有多个,比如10个游戏服,20个网关服等 设计思想 1. 思路参考 ...
- Python ID 生成(UUID、自增、19位雪花算法ID)
UUID UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来作为主键,原理上它是可以对任何东西进行唯一的编码的 ...
- WAVE音频文件格式及其64位扩展格式的简要介绍
正文 关于 WAVE 文件格式,网上有不少介绍,但关于WAVE 64位扩展格式的介绍却是几乎没有. 所以本文的目的是简要介绍标准的 WAVE 格式,以及两种主要的扩展格式. 文中所有代码都用C语言来描 ...
- php+tcc,64位Linux环境安装PHP TCC扩展方法
近日发现了一个很有用的PHP扩展,它可以让PHP直接执行C代码,无需编译.TCC(Tiny C Compiler)是一个C编译器,支持直接执行C源代码. 关于TCC的介绍这里不多说,刚开始在32位Ub ...
最新文章
- WCF 框架运行时类图
- mysql decode encode 乱码问题
- Linux系统时间函数
- MySQL事务的回滚
- Android Stdio 里的 SQLite数据库 刷新和保存
- Central Authentication Service
- 这个拖后腿的“in”
- python变量分配内存_Python | 声明任何变量而不分配任何值
- C语言 指针数组 - C语言零基础入门教程
- Delphi通过ADOQuery控件实现Sqlserver数据库多结果集的数据打印
- “明年AI会如何?”英伟达问了13位不同行业的专家
- 在 Docker 中使用 mysql 的一些技巧
- CSS基础汇总——点击标题跳转详细博客【学习笔记】
- framework7的改进,以及与vue组合使用遇到的问题以及解决方法 (附vue的原理)
- 將字串轉換為日期型數據的例子
- JVM监控及诊断工具命令行篇之jstat
- 大数据概念思维导图_大数据技术思维导图
- 如何在计算机修改wifi密码,wifi修改密码,教您电脑怎么修改wifi密码
- OV2640拍摄jpg图像无法解析
- Ios常用第三方动画框架(三)