在运用程序中,常常须要全局唯一的ID作为数据库主键。怎样生成全局唯一ID?

起首,须要肯定全局唯一ID是整型照样字符串?假如是字符串,那末现有的UUID就完整满足需求,不须要分外的事情。瑕玷是字符串作为ID占用空间大,索引效力比整型低。

假如采纳整型作为ID,那末起首排撤除32位int范例,因为局限太小,必需运用64位long型。

采纳整型作为ID时,怎样生成自增、全局唯一且不反复的ID?

计划一:运用数据库的自增ID,从1入手下手,基础能够做到一连递增。Oracle能够用SEQUENCE,MySQL能够用主键的AUTO_INCREMENT,虽然不能保证全局唯一,但每一个表唯一,也基础满足需求。

数据库自增ID的瑕玷是数据在插进去前,没法取得ID。数据在插进去后,猎取的ID虽然是唯一的,但一定要比及事件提交后,ID才算是有用的。有些双向援用的数据,不能不插进去后再做一次更新,比较贫苦。

第二种体式格局是采纳一个集中式ID生成器,它能够是Redis,也能够是ZooKeeper,也能够运用数据库的表纪录末了分派的ID。

这类体式格局最大的瑕玷是庞杂性太高,须要严峻依靠第三方效劳,而且代码设置烦琐。一般来讲,越是庞杂的计划,越不牢靠,而且测试越痛楚。

第三种体式格局是相似Twitter的Snowflake算法,它给每台机械分派一个唯一标识,然后经由过程时候戳+标识+自增完成全局唯一ID。这类体式格局优点在于ID生成算法完整是一个无状态机,无收集挪用,高效牢靠。瑕玷是假如唯一标识有反复,会形成ID争执。

Snowflake算法采纳41bit毫秒时候戳,加上10bit机械ID,加上12bit序列号,理论上最多支撑1024台机械每秒生成4096000个序列号,关于Twitter的范围来讲够用了。

然则关于绝大部分一般运用程序来讲,基础不须要每秒凌驾400万的ID,机械数目也达不到1024台,所以,我们能够革新一下,运用更短的ID生成体式格局:

53bitID由32bit秒级时候戳+16bit自增+5bit机械标识构成,积累32台机械,每秒能够生成6.5万个序列号,中心代码:

private static synchronized long nextId(long epochSecond) {

if (epochSecond < lastEpoch) {

// warning: clock is turn back:

logger.warn("clock is back: " + epochSecond + " from previous:" + lastEpoch);

epochSecond = lastEpoch;

}

if (lastEpoch != epochSecond) {

lastEpoch = epochSecond;

reset();

}

offset++;

long next = offset & MAX_NEXT;

if (next == 0) {

logger.warn("maximum id reached in 1 second in epoch: " + epochSecond);

return nextId(epochSecond + 1);

}

return generateId(epochSecond, next, SHARD_ID);}

时候戳减去一个固定值,此计划最高可支撑到2106年。

假如每秒6.5万个序列号不够怎么办?没紧要,能够继承递增时候戳,向前“借”下一秒的6.5万个序列号。

同时还处置惩罚了时候回拨的问题。

机械标识采纳简朴的主机名计划,只需主机名相符host-1,host-2就能够自动提取机械标识,无需设置。

末了,为何采纳最多53位整型,而不是64位整型?这是因为考虑到大部分运用程序是Web运用,假如要和JavaScript打交道,因为JavaScript支撑的最大整型就是53位,凌驾这个位数,JavaScript将丧失精度。因而,运用53位整数能够直接由JavaScript读取,而凌驾53位时,就必需转换成字符串才保证JavaScript处置惩罚准确,这会给API接口带来分外的庞杂度。这也是为何新浪微博的API接口会同时返回id和idstr的缘由。

引荐教程:《PHP》《Laravel教程》

以上就是Laravel 分布式唯一 ID 生成器运用的细致内容,更多请关注ki4网别的相干文章!

收藏 | 0

php id 生产器,Laravel 分布式唯一 ID 生成器运用_PHP开发框架教程相关推荐

  1. 分布式唯一ID生成企业级方案(含时钟回拨生产级解决)

    目录 分布式唯一ID要求 常见的几种方案 一. 数据库自增主键 二. UUID 三. SnowFlow算法 四. Redis自增机制 五. flickr 雅虎公司方案 六. flickr方案的高并发优 ...

  2. idgenerator 会重复吗_终极版:分布式唯一ID的几种生成方案

    在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识.商品需要唯一标识.消息需要唯一标识.事件需要唯一标识等,都需要全局唯一ID,尤其是复杂的分布式业务场景中全局唯一ID更为重要. 那么 ...

  3. 分享大厂分布式唯一ID设计方案,快来围观

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:终于放弃了单调的swagger-ui了,选择了这款神器-knife4j个人原创+1博客:点击前往,查看更多 作者 ...

  4. java生成唯一有序序列号_分布式唯一 ID 之 Snowflake 算法

    SegmentFault 社区专栏:全栈修仙之路作者:semlinker No.1 Snowflake 简介 1.1 什么是 Snowflake Snowflake is a service used ...

  5. Redis之String应用场景与SpringCache--存储对象信息、分布式唯一ID、文章阅读量、Lua脚本

    String应用场景 一.存储对象信息 代码 重写Redis序列 解决方式 剖析SpringCache常用注解 @CacheConfig @Cacheable @CachePut @CacheEvic ...

  6. 分布式唯一id:snowflake算法思考

    匠心零度 转载请注明原创出处,谢谢! 缘起 为什么会突然谈到分布式唯一id呢?原因是最近在准备使用RocketMQ,看看官网介绍: 一句话,消息可能会重复,所以消费端需要做幂等.为什么消息会重复后续R ...

  7. snowflake算法 php,PHP实现Snowflake生成分布式唯一ID的方法示例

    前言 Twitter 的 snowflake 在分布式生成唯一 UUID 应用还是蛮广泛的,基于 snowflake 的一些变种的算法网上也有不少.使用 snowflake 生成 UUID 很多都是在 ...

  8. asp按时间自动递增编号_Java秒杀系统实战系列-分布式唯一ID生成订单编号

    本文是"Java秒杀系统实战系列文章"的第七篇,在本文中我们将重点介绍 "在高并发,如秒杀的业务场景下如何生成全局唯一.趋势递增的订单编号",我们将介绍两种方法 ...

  9. 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题

    转载自   百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题 UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器.而且,它非常适 ...

最新文章

  1. 安装Oracle Database 11g 找不到文件“WFMLRSVCApp.ear” .
  2. OSChina 娱乐弹弹弹——Team,对你爱爱爱不完
  3. Android将数据库数据导出成excel格式的文本(CSV)
  4. 英国电信云服务直连Salesforce
  5. python爬虫反爬机制_Python Scrapy突破反爬虫机制(项目实践)
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的共享单车管理系统
  7. Python多线程编程中daemon属性的作用
  8. MMU页表的内存消耗
  9. 计算机中缺失freeimage.dll,修复freeimage.dll
  10. 转:组态软件测评∣WinCC、Citect、LabVIEW、InTouch、Ingnition,你更喜欢用哪个?
  11. 【51单片机】通过定时器中断 在8位数码管显示时间
  12. java 图片处理之寸照背景色替换
  13. 学会这几个可视化布局思路,轻松做出企业级可视化大屏
  14. 为Dragonfly配置私有仓库
  15. 一文读懂云计算、大数据、人工智能
  16. Ardunio开发:esp32—cam摄像头
  17. 解决服务器网卡不识别问题
  18. 自兴人工智能——Python第二课(列表和元组)
  19. 有梦想,就去追,不犹豫,不后悔
  20. 计算机为啥启用不了网络发现,win7系统“网络发现”功能启用不了的解决方法...

热门文章

  1. 分享2款设备管理系统源码:Springboot医院设备管理+物联网云监控IOT设备管理
  2. 【云原生进阶之容器】第二章Controller Manager原理2.8节--Resync机制
  3. 小傻蛋的妹妹跟随小甲鱼学习Python的第十一节011
  4. 教你如何搭建本地私有云
  5. 发布坐标转换软件OpenCoord的使用第二集-椭球转换
  6. 【large bin 】源码解析
  7. 三维空间到四维空间的距离遐想
  8. XML 测试用例分类Variants参数
  9. 如何在互联网存量时代做电商?
  10. BrupSuite Repeater模块