雪花算法(代码片段)

FatalFlower FatalFlower     2022-10-21     667

关键词:

在分布式场景中,如何生成一个全局的唯一 ID ?由于是通过多台机器并行运算,因此一般的时间戳、UUID 都不是很可靠。为此,Twitter 提出了一种名为 “雪花算法” 的算法来生成分布式全局唯一 ID 的算法

算法介绍

“雪花算法” 生成的 ID 为 \\(64\\) 位整数,其中,前 \\(41\\) 位(\\(64\\) 位整数第一位表示符号位,不作为开始位)表示自选定的日期以来经过的毫秒数。接下来的 \\(10\\) 位表示当前的计算机 ID,剩下的 \\(12\\) 位表示每台机器上生成的 ID 序号,具体结构如下所示:

具体实现

实现代码如下:

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class SnowFlake 
    public static void main(String[] args) 
        Random random = ThreadLocalRandom.current();
        long timStamp = System.currentTimeMillis(); // 系统当前的时间戳
        long machineId = random.nextInt(0, 1024); // 机器 ID
        long seqId = random.nextInt(0, 4096); // 序列 ID,一般都是机器自增而来,这里只是模拟一下

        long snowId = 0;
        snowId |= (timStamp << 22); 
        snowId |= (machineId << 12);
        snowId |= seqId;

        System.out.println("snow id=" + snowId);
    

算法缺点

  • 基于时间戳的方式,由于压缩了时间戳的存储空间,因此时间戳在某些情况下(这并不太可能)可能会出现时间戳重复的问题
  • 最大机器数为 \\(1024\\),因此某些大型分布式计算可能不适合使用这种算法

参考:

[1] https://zh.wikipedia.org/wiki/雪花算法

雪花算法原理解析(代码片段)

...拆分,设置初始值和相同的自增步长。批量申请自增ID。雪花算法。百度UidGenerator算法(基于雪花算法实现自定义时间戳)。美团Leaf算法(依赖于数据库,ZK)。  本文主要介绍SnowFlake算法,是Twitter开源的分布式id生成算法。  其... 查看详情

雪花算法(代码片段)

雪花算法(snowflake):用于生成分布式ID(纯数字,时间顺序),订单编号等自增ID:记录可以根据ID号进行推测出来,对于数据敏感场景不宜使用。GUID:采用无意义字符串,数据量增大时造成访问过慢,且不宜排序。雪花算法描述... 查看详情

6-9雪花算法与新增功能(代码片段)

新增工具类:/***Twitter的分布式自增ID雪花算法**/@ComponentpublicclassSnowFlake/***起始的时间戳*/privatefinalstaticlongSTART_STMP=1609459200000L;//2021-01-0100:00:00/***每一部分占用的位数*/privatefinalstaticlongSEQUEN 查看详情

id生成算法-雪花算法(snowflake)及代码实现(代码片段)

文章目录前言一、ID生成算法对比二、雪花算法原理三、java实现结尾前言唯一ID可以标识数据的唯一性,在分布式系统中生成唯一ID的方案有很多,常见的方式大概有以下三种:依赖数据库,使用如MySQL自增列或Orac... 查看详情

厉害了,美女同事用单例模式实现了雪花算法!(代码片段)

点击关注公众号,Java干货及时送达雪花算法雪花算法适用于生成全局唯一的编号,比如数据库主键id,订单编号等至于为什么叫雪花算法,是因为科学家通过研究认为自然界中不存在两片完全相同的雪花,所... 查看详情

雪花算法生成id(代码片段)

packagecom.shopping.test;/***SnowFlake的结构如下(每部分用-分开):<br>*0-00000000000000000000000000000000000000000-00000-00000-000000000000<br>*1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正... 查看详情

golang实现twitter雪花算法(代码片段)

1/*2*twitter雪花算法golang实现,生成唯一趋势自增id3*保留位:63位4*毫秒时间戳:[62-20]43位,时间范围[1970-01-0100:00:00.000,2248-09-2615:10:22.207]5*机器id:[19-12]8位,十进制范围[0,255]6*序列号:[11-0]12位,十进制范围[0,4095]7*bobo8*/910packagetest1112i 查看详情

雪花算法生成的id,前端无法使用(代码片段)

由于前端Number类型长度不够,所以雪花算法生成的ID,传递给前端就会精度丢失。解决方案:@ConfigurationpublicclassJacksonConfig@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)publicObjectMapperja 查看详情

谈谈雪花算法的使用(代码片段)

...个月的ECS用来临时对部分项目扩容。其中一个项目有用到雪花算法来生成Id,这个还是挺OK的。不过发现要在配置文件中手动配置机器码!!配置的时候还要先知道目前配置了那些,这样才可以避免重复。经过了解,除了会有单... 查看详情

snowflake雪花算法详解与实现(代码片段)

...avaLib」关注第一时间阅读最新文章。文章目录背景SnowFlake雪花算法算法实现算法验证算法优缺点注意事项背景现在的服务基本是分布式,微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证... 查看详情

java实现雪花算法(snowflake)-生成永不重复的id(源代码+工具类)使用案例(代码片段)

雪花算法是由Twitter公司开源的snowflake(雪花)算法。1、雪花算法的原理雪花算法会生成一个64位的二进制数据,为一个Long型。(转换成字符串后长度最多19),其基本结构:第一位:为未使用第二部分:41位为毫秒级时间(41位... 查看详情

java实现雪花算法(snowflake)-生成永不重复的id(源代码+工具类)使用案例(代码片段)

雪花算法是由Twitter公司开源的snowflake(雪花)算法。1、雪花算法的原理雪花算法会生成一个64位的二进制数据,为一个Long型。(转换成字符串后长度最多19),其基本结构:第一位:为未使用第二部分:41位为毫秒级时间(41位... 查看详情

mybatis-plus插入测试以及雪花算法(代码片段)

Mybatis-Plus插入测试以及雪花算法1、导入依赖<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dep 查看详情

springboot中使用雪花算法生成雪花id(代码片段)

目录1、什么是雪花算法2、雪花算法的优缺点3、springboot项目中使用雪花算法使用1、什么是雪花算法雪花算法(Snowflake)是一种生成全局唯一ID的算法,由Twitter公司开发。它可以在分布式系统中生成全局唯一的ID,... 查看详情

结合redis在spring架构体系中使用雪花算法(代码片段)

...。这里记录下在工作中我结合Redis在Spring架构体系中使用雪花算法生成分布式ID的方式。一、代码部分importlombok.extern.slf4j.Slf4j;importorg.springframework.data.redis.core.StringRedisTemplate;importorg.springframework.s 查看详情

雪花算法:分布式唯一id生成利器(代码片段)

...的生成,都是软件开发人员经常会面临的一场景。而雪花算法便是这些场景的一个解决方案。以分布式ID为例,它的生成往往会在唯一性、递增性、高可用性、高性能等方面都有所要求。并且在业务处理时,还要防止... 查看详情

雪花算法如何生成用户id?有什么高明之处?(代码片段)

...注。未来我们一起加油!前言文章目录博主简介前言雪花算法生成用户ID分布式ID生成器分布式ID的特点snowflake算法介绍设计思想snowflake的Go实现Twitter索尼雪花 查看详情

oracleid生成算法——雪花算法(代码片段)

背景近几日,被主键ID生成折磨的不太行,于是就在寻找一种合适的主键生成策略,选择一种合适的主键生成策略,可以大大降低主键ID的维护成本。主键ID生成方法最常用的4种主键ID生成方法UUID:全局唯一性&... 查看详情