Title

随笔分类 -  雪花算法

摘要:雪花算法初步完成后,我们讨论了几个位运算的写法,大家知道雪花算法一旦确定后,很多数字都是定死的,比如机器占多少位,或者时间向左位移多少,这些在算法具体逻辑确定后就不会变了。那么写成最后的数字和用位运算计算出来有什么区别呢? 其实没有区别,我们的程序分为编译期和运行期,我们直接把程序编译好,然后查看c 阅读全文
posted @ 2019-08-15 13:35 程序员郭艺宾 阅读(16841) 评论(2) 推荐(2)
摘要:n位二进制表示的最大值 雪花算法已经初步完成了。现在我们再来看几个位操作。先看第一个,还是左移操作,不过这里演示负数左移: 1L 2^1 1L 2^n ~ 1、取反后,正整数变成了负整数,负整数变成了正整数 2、取反后,无论原来是正数还是负数,结果都会变成 (n+1) 1L 2^n 1 1L 不超过 阅读全文
posted @ 2019-08-15 11:34 程序员郭艺宾 阅读(1242) 评论(0) 推荐(0)
摘要:前面的内容把雪花算法的时间部分和机器信息部分都生成了,下面来生成最后一部分,就是毫秒内的序列。什么意思呢?我们在生成时间部分获取时间戳的时候,使用 long now = System.currentTimeMillis(); 获取,是个毫秒级的时间戳,但是即使是这么短的时间,对于电脑来说也足够生成很 阅读全文
posted @ 2019-08-15 10:07 程序员郭艺宾 阅读(970) 评论(0) 推荐(0)
摘要:时间部分生成后,下一步是机器信息,占10位。我们这里把机器信息分成两部分,一部分是数据中心id,占5位,一部分是机器id,占5位。这两个id可以在部署项目的时候根据不同的机器自定义不同的id,这样能人为的保障每个id都不同。比如: 也可以根据自己机器的情况自动生成,不过有很小很小的风险会重复,这个风 阅读全文
posted @ 2019-08-14 19:06 程序员郭艺宾 阅读(872) 评论(0) 推荐(0)
摘要:前面的理论基础和位运算都了解了,下面我们来生成雪花算法的第一部分,也就是时间部分。时间部分的逻辑起始很简单,就是规定一个起始时间戳,然后用当前时间戳减去起始时间戳,这两个数的差就是我们要的结果。简单看一下代码逻辑: 我们规定的起始时间是 2015 01 01 00:00:00 ,然后获取当前时间,用 阅读全文
posted @ 2019-08-14 16:16 程序员郭艺宾 阅读(3048) 评论(0) 推荐(0)
摘要:前面介绍了雪花算法的理论基础,可以对大概的算法有个了解,但是细节上可能还是模糊,下面来说一下雪花算法中用到的位运算。这里先介绍两个,一个是: 介绍一个例子比如有三个数字,分别打印出这三个数字的二进制形式: 可以看到,5对应的二进制就是101,8对应的2进制就是1000,10对应的二进制就是1010。 阅读全文
posted @ 2019-08-14 13:38 程序员郭艺宾 阅读(1289) 评论(0) 推荐(0)
摘要:针对每个公司,随着服务化演进,单个服务越来越多,数据库分的越来越细,有的时候一个业务需要分成好几个库,这时候自增主键或者序列之类的主键id生成方式已经不再满足需求,分布式系统中需要的是一个全局唯一的id生成规则。既然号称在全局分布式系统中唯一,那么主键的生成规则必然要复杂一些,以前看过很多资料,都对 阅读全文
posted @ 2019-08-13 19:26 程序员郭艺宾 阅读(1215) 评论(0) 推荐(0)