千家信息网

PHP怎么利用雪花算法生成唯一ID

发表于:2024-09-24 作者:千家信息网编辑
千家信息网最后更新 2024年09月24日,这篇文章主要讲解了"PHP怎么利用雪花算法生成唯一ID",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PHP怎么利用雪花算法生成唯一ID"吧!一、雪花算
千家信息网最后更新 2024年09月24日PHP怎么利用雪花算法生成唯一ID

这篇文章主要讲解了"PHP怎么利用雪花算法生成唯一ID",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PHP怎么利用雪花算法生成唯一ID"吧!

一、雪花算法原理解析

1. 分布式ID常见生成策略

分布式ID生成策略常见的有如下几种:

  • 数据库自增ID。

  • UUID生成。

  • Redis的原子自增方式。

  • 数据库水平拆分,设置初始值和相同的自增步长。

  • 批量申请自增ID。

  • 雪花算法。

  • 百度UidGenerator算法(基于雪花算法实现自定义时间戳)。

  • 美团Leaf算法(依赖于数据库,ZK)。

本文主要介绍SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。

其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,保持自增性且不重复。

2. 雪花算法的结构

主要分为以下几个部分:

  • 是 1 个 bit:0,这个是无意义的。

  • 是 41 个 bit:表示的是时间戳。

  • 是 10 个 bit:表示的是机房 id,0000000000,因为我传进去的就是0。

  • 是 12 个 bit:表示的序号,就是某个机房某台机器上这一毫秒内同时生成的 id 的序号,0000 0000 0000。

我们分别解释一下四个部分:

1 bit

是无意义的:

因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。

41 bit

表示的是时间戳,单位是毫秒。

41 bit 可以表示的数字多达 2^41 - 1,也就是可以标识 2 ^ 41 - 1 个毫秒值,换算成年就是表示 69 年的时间。

10 bit

记录工作机器 id,代表的是这个服务最多可以部署在 2^10 台机器上,也就是 1024 台机器。

但是 10 bit 里 5 个 bit 代表机房 id,5 个 bit 代表机器 id。意思就是最多代表 2 ^ 5 个机房(32 个机房),每个机房里可以代表 2 ^ 5 个机器(32 台机器),这里可以随意拆分,比如拿出4位标识业务号,其他6位作为机器号。可以随意组合。

12 bit

这个是用来记录同一个毫秒内产生的不同 id。

12 bit 可以代表的最大正整数是 2 ^ 12 - 1 = 4096,也就是说可以用这个 12 bit 代表的数字来区分同一个毫秒内的 4096 个不同的 id。也就是同一毫秒内同一台机器所生成的最大ID数量为4096

简单来说,你的某个服务假设要生成一个全局唯一 id,那么就可以发送一个请求给部署了 SnowFlake 算法的系统,由这个 SnowFlake 算法系统来生成唯一 id。这个 SnowFlake 算法系统首先肯定是知道自己所在的机器号,(这里姑且讲10bit全部作为工作机器ID)接着 SnowFlake 算法系统接收到这个请求之后,首先就会用二进制位运算的方式生成一个 64 bit 的 long 型 id,64 个 bit 中的第一个 bit 是无意义的。接着用当前时间戳(单位到毫秒)占用41 个 bit,然后接着 10 个 bit 设置机器 id。最后再判断一下,当前这台机房的这台机器上这一毫秒内,这是第几个请求,给这次生成 id 的请求累加一个序号,作为最后的 12 个 bit。

二、PHP源码实现案例

1.demo1

2.demo2

SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),效率较高。但是依赖与系统时间的一致性,如果系统时间被回调,或者改变,可能会造成id冲突或者重复。实际中我们的机房并没有那么多,我们可以改进改算法,将10bit的机器id优化,成业务表或者和我们系统相关的业务。

感谢各位的阅读,以上就是"PHP怎么利用雪花算法生成唯一ID"的内容了,经过本文的学习后,相信大家对PHP怎么利用雪花算法生成唯一ID这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

算法 机器 生成 时间 雪花 系统 机房 代表 就是 数据 分布式 也就是 业务 二进制 序号 数字 数据库 学习 不同 最大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库连接池设置为多大合适 海曙嵌入式软件开发周期 江苏网络安全工控机哪家好 手机服务器关闭了怎么开启 零基础可能去软件开发公司吗 运营商和软件开发区别 网络安全手抄报全校第一名 数据库记录二维码信息 珠海自动量化交易软件开发费用 正定高科技软件开发服务咨询报价 甘肃联想服务器续保维护 北京餐饮软件开发 山西临汾网络安全心得体会 安徽物资管理软件开发平台 数据库应用技术好就业吗 为什么服务器关机特别慢 软件开发内容更改多少算重大 深圳服务器系统运维服务方案价钱 绝境求生 服务器 商丘市五中网络技术 陇西招聘网络技术 软件开发 测试化验加工费 网络安全工程师必会的知识 巢湖品质网络技术咨询是真的吗 软件开发的职责职业发展状况 微信群采集服务器 深圳服务器系统运维服务方案价钱 小火箭服务器下载 服务器上用双域有什么用 网络安全测试计划书
0