##原理

参考Twitter-Snowflake 算法,扩展了其中的细节。具体组成如下图:

如图所示,64bits 咱们分成了4个部分。

  1. 毫秒级的时间戳,有42个bit.能够使用139年,从1970年开始计算,能使用到2109年,当然这些是可以扩展的,可以通知指定起始时间来延长这个日期长度。
  2. 自定义节点id,防止多进程运行产生重复id,占位12个bit,能够支持4096个节点。部署的时候可以配置好服务器id;
  3. 进程workerid,占位5bit,能够生成32个进程id。根据pid运算获得。(已经取消)
  4. 进程内毫秒时间自增序号。占位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生成器相关推荐

  1. Twitter-Snowflake,64位自增ID算法详解

    Twitter-Snowflake,64位自增ID算法详解 from: http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8 ...

  2. java 自定义自增_自定义全局自增ID生成器

    看了网上很多生成自增ID的策略,最终给出的都是雪花算法,leaf算法.但是却没有满足咱们对于自定义生成规则的需求. 在业务上有一部分ID往往是有规则的,比如某个产品的订单号往往是"产品标志+ ...

  3. java id生成器 分布式_分布式高效唯一ID生成器(sequence)

    分布式高效唯一ID生成器(sequence) 简介 高效GUID产生算法(sequence),基于Snowflake实现64位自增ID算法. Twitter-Snowflake算法产生的背景相当简单, ...

  4. flash player for linux 64,总算明白为什么Flash Player迟迟出不了64位版本了

    终于明白为什么Flash Player迟迟出不了64位版本了 板子要打在macromedia身上,因为在那Internet的蛮荒岁月,macromedia为了尽可能的减少swf文件的尺寸,在一部分对象 ...

  5. 为什么64位计算机CPU架构叫amd64

    x86 1978 年 6 月,Intel 发布了新款 16 位微处理器 8086,开创了一个全新时代,x86 架构由此诞生.x86 架构指的是特定微处理器执行的计算机语言指令集,定义了芯片的基本使用规 ...

  6. c++实现的唯一ID生成器

    设计背景 用作游戏服务器给每个角色生成UID,给物品生成唯一ID,有多个服务器类型,例如:游戏服,中心服,网关服等等:每个类型的服务器有多个,比如10个游戏服,20个网关服等 设计思想 1. 思路参考 ...

  7. Python ID 生成(UUID、自增、19位雪花算法ID)

    UUID UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来作为主键,原理上它是可以对任何东西进行唯一的编码的 ...

  8. WAVE音频文件格式及其64位扩展格式的简要介绍

    正文 关于 WAVE 文件格式,网上有不少介绍,但关于WAVE 64位扩展格式的介绍却是几乎没有. 所以本文的目的是简要介绍标准的 WAVE 格式,以及两种主要的扩展格式. 文中所有代码都用C语言来描 ...

  9. php+tcc,64位Linux环境安装PHP TCC扩展方法

    近日发现了一个很有用的PHP扩展,它可以让PHP直接执行C代码,无需编译.TCC(Tiny C Compiler)是一个C编译器,支持直接执行C源代码. 关于TCC的介绍这里不多说,刚开始在32位Ub ...

最新文章

  1. WCF 框架运行时类图
  2. mysql decode encode 乱码问题
  3. Linux系统时间函数
  4. MySQL事务的回滚
  5. Android Stdio 里的 SQLite数据库 刷新和保存
  6. Central Authentication Service
  7. 这个拖后腿的“in”
  8. python变量分配内存_Python | 声明任何变量而不分配任何值
  9. C语言 指针数组 - C语言零基础入门教程
  10. Delphi通过ADOQuery控件实现Sqlserver数据库多结果集的数据打印
  11. “明年AI会如何?”英伟达问了13位不同行业的专家
  12. 在 Docker 中使用 mysql 的一些技巧
  13. CSS基础汇总——点击标题跳转详细博客【学习笔记】
  14. framework7的改进,以及与vue组合使用遇到的问题以及解决方法 (附vue的原理)
  15. 將字串轉換為日期型數據的例子
  16. JVM监控及诊断工具命令行篇之jstat
  17. 大数据概念思维导图_大数据技术思维导图
  18. 如何在计算机修改wifi密码,wifi修改密码,教您电脑怎么修改wifi密码
  19. OV2640拍摄jpg图像无法解析
  20. Ios常用第三方动画框架(三)

热门文章

  1. CN.Text开发笔记—利用反射将数据读入实体类
  2. Python爬虫(三)_urllib2:get和post请求
  3. Tensorflow--Debug
  4. 在CentOS上搭建PHP服务器环境
  5. 聚集索引和非聚集索引实例
  6. auto register volatile 比较总结
  7. 19-spring学习-springMVC环境配置
  8. Go 1.9 sync.Map揭秘
  9. SQLite 使用教程2 语法
  10. Log4Net使用入门