雪花算法(04)机器信息

时间部分生成后,下一步是机器信息,占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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,104评论 6 13
  • 之所以期待天明,是因为天明后,女儿岑岑也会醒来了。 刚刚临睡前,岑岑请求和我一起睡,被我果断地拒绝了。不想让她长时...
    爱阅沈阳阅读 535评论 0 0
  • 我们后来住的这个院子,早就听婆婆说过,树多,动物也多。 婆婆就曾经为门前的一排可以入药的杜仲树,很为骄傲地指给我看...
    穗儿_4ced阅读 310评论 0 1
  • 当我们偶然或者有意地去翻看曾经的照片,总有不同的很多的感概。 我们在情感,交际,事业的道路上摸索,碰壁,奋斗~反反...
    崖边草阅读 199评论 0 0