网站首页 > 技术文章 正文
时间部分生成后,下一步是机器信息,占10位。我们这里把机器信息分成两部分,一部分是数据中心id,占5位,一部分是机器id,占5位。这两个id可以在部署项目的时候根据不同的机器自定义不同的id,这样能人为的保障每个id都不同。比如:
/** 设置数据中心id为1 */ private static final long DATA_ID = 1L; /** 设置机器id为2 */ private static final long WORK_ID = 2L;
也可以根据自己机器的情况自动生成,不过有很小很小的风险会重复,这个风险碰到的几率不大,当然如果能手动设置还是最好的。我们来说一下自己生成的情况。
我们的jdk库中,有api可以获取本地机器的hostname和hostaddress,我们来看一下:
我们来把hostname的信息作为数据中心id,把hostaddress的信息作为机器id,如何把两个字符串改为两个数字id呢?其实很简单。获取字符串的字节数组,然后把数组的每个数字相加,对节点数的最大值取余:
每个id的长度都是5,二进制中5个1的最大值就是31,所以数据id和机器id每个的最大值也是31,下面是获取两个id的方法:
如果出现异常,返回一个随机数,保证id的可靠性。下面可以定义两个的id了:
因为机器信息分成了两部分分别生成的,所以,要分别位移,数据id要向左位移17位,机器id要向左位移12位。正好占据10位。
现在我们再来看下第二部分机器信息的限制,这两个id每个的值都占五位,二进制的值从 00000 到11111,整数的范围就是0-31之间共32个。那么雪花算法可以部署的机器数就是32*32=1024个,这是机器信息的限制,现在看这数字也是足足的够了。注意如果自己给这两个参数赋值,也要限制在31之内。
代码地址:https://gitee.com/blueses/snowflake-demo 04
- 上一篇: 事件监听获取自定义属性的值(LayUI)
- 下一篇: 自己看着办(自己看着办吧怎么回)
猜你喜欢
- 2024-09-27 20240926(20240926农历是)
- 2024-09-27 技术小障,情谊长存:致师友们的致歉与感激信
- 2024-09-27 玩转微信应用号,「小程序」开发实操指南第六弹
- 2024-09-27 分布式id生成器&分布式锁介绍
- 2024-09-27 基于PostgreSQL的分布式数据库—Citus
- 2024-09-27 分布式id生成器:推特「雪花算法」最优解
- 2024-09-27 如何在公众号消息发送小程序,不用第三方!
- 2024-09-27 JS获取和设置元素的属性以及属性值
- 2024-09-27 yyui(y与I)
- 2024-09-27 发那科 FANUC OIC (OI MATE TC OITC OI MATE MC OI MC)系统报警
- 1510℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 541℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 497℃MySQL service启动脚本浅析(r12笔记第59天)
- 477℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 475℃启用MySQL查询缓存(mysql8.0查询缓存)
- 455℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 434℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 432℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)