资讯专栏INFORMATION COLUMN

雪花算法(03)生成时间

张红新 / 1042人阅读

摘要:前面的理论基础和位运算都了解了,下面我们来生成雪花算法的第一部分,也就是时间部分。这个时候就有一个问题了,如果我们系统的时钟错了会不会有问题会所以要做判断而且系统的时钟错误也是雪花算法的一个致命问题,所以要一定要保证服务器的系统时间正确。

前面的理论基础和位运算都了解了,下面我们来生成雪花算法的第一部分,也就是时间部分。时间部分的逻辑起始很简单,就是规定一个起始时间戳,然后用当前时间戳减去起始时间戳,这两个数的差就是我们要的结果。简单看一下代码逻辑:

我们规定的起始时间是 2015-01-01 00:00:00 ,然后获取当前时间,用当前时间减去起始时间,就是我们要的时间部分的数值。这个时候就有一个问题了,如果我们系统的时钟错了会不会有问题?会!所以要做判断!而且系统的时钟错误也是雪花算法的一个致命问题,所以要一定要保证服务器的系统时间正确。来看一下对时间戳的判断:

定义了一个变量LAST_TIME_STAMP记为上次id的生成时间,每次生成都标记一下,所以这个时间一定是递增的,如果系统时钟除了问题,那么直接报异常。这是对系统时间错误的一个判断和处理。

就这样时间部分就生成了,现在看看还是很简单的。现在我们再来看雪花算法的时间范围,由于时间共占有41位,所以时间的数字范围是有一个最大值的,写成2进制就是41个1,比如我们的起始时间是2015-01-01 00:00:00,时间戳是1420041600000L,把41个1转换成long类型数字,再加上这个时间戳数字,就是一个雪花算法最终的时间戳,转换成时间就是2084-09-06 15:47:35,也就是这个41位时间的雪花算法最长使用69年9个月6天零15小时47分35秒,不过对于一个项目来说,这样的限制不算限制,足足的够用了。

代码地址:https://gitee.com/blueses/snowflake-demo 03

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76133.html

相关文章

  • 雪花算法(01)介绍

    摘要:雪花算法生成的最终结果其实就是一个类型的长整型数字,这是一个大前提算法所有的内容都是针对这个数字进行运算的。根据上面的理论可以开始学习雪花算法。 针对每个公司,随着服务化演进,单个服务越来越多,数据库分的越来越细,有的时候一个业务需要分成好几个库,这时候自增主键或者序列之类的主键id生成方式已经不再满足需求,分布式系统中需要的是一个全局唯一的id生成规则。既然号称在全局分布式系统中唯一...

    or0fun 评论0 收藏0
  • 雪花算法(05)毫秒内序列

    摘要:前面的内容把雪花算法的时间部分和机器信息部分都生成了,下面来生成最后一部分,就是毫秒内的序列。这样毫秒内的序列数就算获取成功了。 前面的内容把雪花算法的时间部分和机器信息部分都生成了,下面来生成最后一部分,就是毫秒内的序列。什么意思呢?我们在生成时间部分获取时间戳的时候,使用 long now = System.currentTimeMillis(); 获取,是个毫秒级的时间戳,但是即...

    时飞 评论0 收藏0
  • Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID (Java版

    摘要:原理的雪花算法,使用语言实现。生成的整体上按照时间自增排序,并且整个分布式系统内不会产生碰撞由和作区分,并且效率较高。据说每秒能够产生万个。 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 ...

    Awbeci 评论0 收藏0
  • 雪花算法(07)雪花算法最终版

    摘要:雪花算法初步完成后,我们讨论了几个位运算的写法,大家知道雪花算法一旦确定后,很多数字都是定死的,比如机器占多少位,或者时间向左位移多少,这些在算法具体逻辑确定后就不会变了。 雪花算法初步完成后,我们讨论了几个位运算的写法,大家知道雪花算法一旦确定后,很多数字都是定死的,比如机器占多少位,或者时间向左位移多少,这些在算法具体逻辑确定后就不会变了。那么写成最后的数字和用位运算计算出来有什么...

    piapia 评论0 收藏0
  • 雪花算法 - snowflake

    摘要:有些时候我们希望能使用一种简单一些的,并且希望能够按照时间有序生成。转换成字符串后长度最多生成的整体上按照时间自增排序,并且整个分布式系统内不会产生碰撞由和作区分,并且效率较高。经测试每秒能够产生万个。 概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我...

    lemon 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<