雪花算法

雪花算法简单描述: 可以用在分布式框架
最高位是符号位,始终为0,不可用。

41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。

10位的机器标识,10位的长度最多支持部署1024个节点。

12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号。

原文地址:https://www.cnblogs.com/inbeijing/p/10266120.html

时间: 2024-10-31 07:12:40

雪花算法的相关文章

mybatis plus 主键生成 Twitter雪花算法 id 及修改id为字符型

mybatis plus配置主键生成策略为2,就是 使用Twitter雪花算法 生成id spring boot中配置为: GlobalConfiguration conf = new GlobalConfiguration(new LogicSqlInjector()); conf.setIdType(5); 这样生成的是long类型的,如果想把这个id 转为字符串类型,则配置主键生成策略为5就行了 https://gitee.com/baomidou/mybatis-plus/blob/de

雪花算法解析 生成uuid

package com.grid.service; public class SnowflakeIdWorker { /** * 雪花算法解析 结构 snowflake的结构如下(每部分用-分开): * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 * 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId

一个类似 Twitter 雪花算法 的 连续序号 ID 产生器 SeqIDGenerator

项目地址 :     https://github.com/kelin-xycs/SeqIDGenerator 今天 QQ 群 里有网友问起产生唯一 ID 的方法 有哪些,  讨论了各种方法 . 有网友提到 Twitter 的 雪花算法 :       https://blog.csdn.net/w200221626/article/details/52064976 我觉得 GUID 的 优点 是 简单 高效, 缺点 是 可读性 比较差 . 高效 是指 相比起 要到 数据库 读取 种子(当前最大

雪花算法(snowflake)delphi版

雪花算法简单描述: + 最高位是符号位,始终为0,不可用. + 41位的时间序列,精确到毫秒级,41位的长度可以使用69年.时间位还有一个很重要的作用是可以根据时间进行排序. + 10位的机器标识,10位的长度最多支持部署1024个节点. + 12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号. 看的出来,这个算法很简洁也很简单,但依旧是一个很好的ID生成策略.其中,10位器标识符一般是5位IDC+5

雪花算法中机器id保证全局唯一

关于分布式id的生成系统, 美团技术团队之前已经有写过一篇相关的文章, 详见 Leaf——美团点评分布式ID生成系统 通常在生产中会用Twitter开源的雪花算法来生成分布式主键 雪花算法中的核心就是机器id和数据中心id, 通常来说数据中心id可以在配置文件中配置, 通常一个服务集群可以共用一个配置文件, 而机器id如果也放在配置文件中维护的话, 每个应用就需要一个独立的配置, 难免也会出现机器id重复的问题 解决方案: 1. 通过启动参数去指定机器id, 但是这种方式也会有出错的可能性 2.

生成唯一id写法,雪花算法

这个工具直接调用就可以了,用法和写法如下: 代码: 这个是雪花算法的写法: 1 public class SnowFlakeUtil { 2 3 /** 4 * 起始的时间戳 5 */ 6 private final static long START_STMP = 1480166465631L; 7 8 /** 9 * 每一部分占用的位数 10 */ 11 private final static long SEQUENCE_BIT = 12; //序列号占用的位数 12 private fi

雪花算法(01)介绍

针对每个公司,随着服务化演进,单个服务越来越多,数据库分的越来越细,有的时候一个业务需要分成好几个库,这时候自增主键或者序列之类的主键id生成方式已经不再满足需求,分布式系统中需要的是一个全局唯一的id生成规则.既然号称在全局分布式系统中唯一,那么主键的生成规则必然要复杂一些,以前看过很多资料,都对雪花的生成一知半解,最后才发现是对Java的位运算没有彻底了解,这里想针对雪花算法,以一种浅显的的方式来进行学习,去除以前的一知半解和对雪花算法的神秘感. 雪花算法生成的最终结果其实就是一个long类

雪花算法(02)算法中的位运算

前面介绍了雪花算法的理论基础,可以对大概的算法有个了解,但是细节上可能还是模糊,下面来说一下雪花算法中用到的位运算.这里先介绍两个,一个是: << 一个是 | <<的作用是将数字向左移动,这里的数字指的是二进制中的数,并不是字面上的长整型数字,当然移动后数字字面值肯定发生变化,但是这里对这个操作的主要理解要放在二进制数字向左移动上,而不是字面值扩大2的n次方倍. "|" 的作用是或运算,两个数对应的位上只要有一个是1就是1,这样的官方解释不太明显,放在雪花算法中

雪花算法(03)生成时间

前面的理论基础和位运算都了解了,下面我们来生成雪花算法的第一部分,也就是时间部分.时间部分的逻辑起始很简单,就是规定一个起始时间戳,然后用当前时间戳减去起始时间戳,这两个数的差就是我们要的结果.简单看一下代码逻辑: 我们规定的起始时间是 2015-01-01 00:00:00 ,然后获取当前时间,用当前时间减去起始时间,就是我们要的时间部分的数值.这个时候就有一个问题了,如果我们系统的时钟错了会不会有问题?会!所以要做判断!而且系统的时钟错误也是雪花算法的一个致命问题,所以要一定要保证服务器的系