id生成机制之---雪花算法

雪花算法:
特性:
1,在多节点下,可以保证我们的全局id的唯一性,不会出现id重复的现象;
2,可以保证我们的id在单节点下是可以排序的;
3,id的位数固定,不会因为id的增长导致我们id的位数变更;
4,id的类型是long类型的数字,不会像uuid虽然保证了唯一性,但是为string类型,查询效率在mysql中要低于long类型;

算法解析:
在这里插入图片描述
雪花算法是一个64字节的long类型数字,其中各部分含义如下。
1,第一部分1个 bit:0,这个是无意义的,它保证了我们的二进制中的首位为0,如果为1则为负数。
2,第二部分41个 bit:表示的是单位为毫秒的时间戳,来保证我们的id是有序的。
4,第三部分是10个 bit:前5个bit表示的是机房id,最多可以有32个机房;后5个bit表示的是机器id,最多可以有32台机器;
6,最后部分是12个 bit:表示的序号,就是某个机房某台机器上这一毫秒内同时生成的 id 的序号,可以保证一毫秒内有4096个id;

使用步骤:
1,创建一个项目,将id包解压放入到项目中,调整package路径。
2,测试直接打开testcreateid.java类运行main方法。
3,项目中使用直接调用getid.createid();方法即可。
4,分布式环境下,根据不同的机房要配置不同的机房号和机器号,最多可以配置32*32个节点;在配置文件中配置相关的机房号和机器号;
在这里插入图片描述
在项目启动的时候,通过shell脚本设置机房好和机器号数值;

-Dsnowflake.workerId=1 -Dsnowflake.datacenterId=1 --启动时传入参数‘机房号’和‘机器号’
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值