• 雪花算法(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;

    <br/>
    也可以根据自己机器的情况自动生成,不过有很小很小的风险会重复,这个风险碰到的几率不大,当然如果能手动设置还是最好的。我们来说一下自己生成的情况。
    <br/><br/><br/><br/>
    
    
    
    
    
    我们的jdk库中,有api可以获取本地机器的hostname和hostaddress,我们来看一下:
    <br/> <center> ![](https://img2018.cnblogs.com/blog/1765723/201908/1765723-20190814190626229-1915340261.png) </center> <br/>
    
    
    我们来把hostname的信息作为数据中心id,把hostaddress的信息作为机器id,如何把两个字符串改为两个数字id呢?其实很简单。获取字符串的字节数组,然后把数组的每个数字相加,对节点数的最大值取余:
    <br/> <center> ![](https://img2018.cnblogs.com/blog/1765723/201908/1765723-20190814190626423-2132064981.png) </center> <br/>
    
    
    每个id的长度都是5,二进制中5个1的最大值就是31,所以数据id和机器id每个的最大值也是31,下面是获取两个id的方法:
    <br/> <center> ![](https://img2018.cnblogs.com/blog/1765723/201908/1765723-20190814190626663-209382301.png) </center> <br/>
    
    
    如果出现异常,返回一个随机数,保证id的可靠性。下面可以定义两个的id了:
    <br/> <center> ![](https://img2018.cnblogs.com/blog/1765723/201908/1765723-20190814190626939-264861000.png) </center> <br/>
    因为机器信息分成了两部分分别生成的,所以,要分别位移,数据id要向左位移17位,机器id要向左位移12位。正好占据10位。
    
    <br/><br/><br/><br/>
    
    
    
    
    
    现在我们再来看下第二部分机器信息的限制,这两个id每个的值都占五位,二进制的值从 00000  到11111,整数的范围就是0-31之间共32个。那么雪花算法可以部署的机器数就是32*32=1024个,这是机器信息的限制,现在看这数字也是足足的够了。注意如果自己给这两个参数赋值,也要限制在31之内。
    <br/><br/>
    
    
    
    
    代码地址:https://gitee.com/blueses/snowflake-demo  04
    <br/>
  • 相关阅读:
    [译]Angular-ui 之 多命名视图(Multiple Named Views)
    [译]Angular-ui 之 Url Routing
    解决错误:“废弃 document 元素之后的内容”——HTML5新特性,局部样式表
    调整iRedmail之Roundcube webmail服务不可不知的几件事
    iredmail邮件服务器之修改默认的web服务端口号
    CentOS6.5下安装iRedMail中需要解决的问题
    [转帖]CentOS下iRedMail安装配置
    基于HBase Hadoop 分布式集群环境下的MapReduce程序开发
    安装配置和使用HBASE Cluster(基于发行版CDH5.0.2)——系列随笔
    修改百度导航的配置文件,改变地图数据的存贮位置以解决空间不够的问题
  • 原文地址:https://www.cnblogs.com/guos/p/11354086.html
Copyright © 2020-2023  润新知