
对于每个公司而言,随着服务的发展,越来越多的单一服务,变得越来越详细,有时需要将一个业务划分为几个库. 此时,将添加主键或序列. 主键id生成方法不再满足分布式系统所需的需求...
对于每个公司而言,随着服务的发展,越来越多的单一服务,变得越来越详细,有时需要将一个业务划分为几个库. 此时,将添加主键或序列. 主键id生成方法不再满足要求. 分布式系统中需要的是全局唯一的ID生成规则. 由于据说它在全局分布式系统中是唯一的,因此生成主键的规则必须更加复杂. 我以前看过很多信息,对雪花的产生也了解得很少. 我终于发现我对Java中的位操作没有足够的了解. 该算法学习起来很简单,消除了雪花算法以前的半知识和奥秘.

雪花算法的最终结果实际上是一个Java长整数. 这是一个主要前提!算法中的所有内容都是为此数字计算的. 人们相信Java基本类型非常熟悉. 有32位整数int类型和64位长整数long类型. 让我们来谈谈long类型. 64位值表示将数字转换为二进制形式时的性能. 第一位代表正负,即符号,其余63位代表文字数字. 让我们简单看一下几个关键的长数字到二进制形式的转换:


查看转换为long的二进制数字:


以上是Java的基础知识,相信每个人都可以理解.
生成长数字ID实际上是填充64位二进制形式,将64位分为几个部分,这两个部分不会相互影响. 每个部分都有自己的生成规则. 在一定的简单大前提下,可以保证全局唯一性.

让我们先谈数字. 长号已签名. 第一位数字为0,为正数,而1为负数. 我们生成的ID必须为正,因此第一位可以确定为0.
其余的63位分为三部分. 第一部分占41位java制作雪花,用于指示时间,该时间将在后面详细描述. 第二部分占10位,用于指示程序所在机器的信息,其余第三部分占12位. 它填充有一个序列java制作雪花,可以理解为一个递增的数字,因此,如果先前时间和机器编号相同,请使用序列差异生成不同的ID.

以上三项信息被转换为数字并填充为63位,这基本上可以保证任何机器在任何时间产生的id都不会重复. 可以推断出时间和顺序是不可控制的,但是机器信息是我们可以控制的,也就是说,设置机器信息是分布式ID不重复的关键.
根据上述理论,您可以开始学习雪花算法.
代码地址: 01
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-154230-1.html
只要不是军用目的或者长期停靠
豆子都是找大口塑料瓶子装着