雪花算法笔记

news2024/11/18 17:46:31

SnowFlake 雪花算法

SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。

实现原理

在这里插入图片描述

雪花算法原理就是生成一个的64位比特位的 long 类型的唯一 id。

最高1位固定值0,因为生成的 id 是正整数,如果是1就是负数了。

接下来41位存储毫秒级时间戳,以当前的时间作为值,所以是时刻改变的。2^41/(1000606024365)=69,大概可以使用69年。

再接下10位存储机器码,这是为了防止多台机器同时申请id,所以以每个机器的地址来做标记。包括5位 datacenterId 和5位 workerId。最多可以部署2^10=1024台机器。

最后12位存储序列号。同一毫秒时间戳时,通过这个递增的序列号来区分。为了解决一台机器同时申请id。即对于同一台机器而言,同一毫秒时间戳下,可以生成2^12=4096个不重复 id。

算法优缺点

优点

  1. 高并发分布式环境下生成不重复 id,每秒可生成百万个不重复 id。
  2. 基于时间戳,以及同一时间戳下序列号自增,基本保证 id 有序递增。
  3. 不依赖第三方库或者中间件。
  4. 算法简单,在内存中进行,效率高。

缺点

依赖服务器时间,服务器时钟回拨时可能会生成重复 id。算法中可通过记录最后一个生成 id 时的时间戳来解决,每次生成 id 之前比较当前服务器时钟是否被回拨,避免生成重复 id。

糊涂工具使用案例

引入依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.11</version>
</dependency>

code

import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;

public class TigerTest {
    public static void main(String[] args) {
        // 参数1为终端ID
        // 参数2为数据中心ID
        Snowflake snowflake = IdUtil.getSnowflake(1, 1);
        long id0 = snowflake.nextId();
        String id1 = snowflake.nextIdStr();

        //简单使用
        long id2 = IdUtil.getSnowflakeNextId();
        String id3 = IdUtil.getSnowflakeNextIdStr();

        Console.log("雪花算法id0:{}",id0);
        Console.log("雪花算法idS0:{}",id1);
        Console.log("雪花算法id1:{}",id2);
        Console.log("雪花算法idStr1:{}",id3);
        Console.log("当前时间戳:{}",System.currentTimeMillis());
    }
}

改进的雪花算法——梨花算法(PearFlower)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React Context 完美替代品 Jotai

1. 前言 React 的属性透传场景 虽然有很多方式可以实现&#xff0c;但能做到代码写的少、re-render 轻松处理的方式并不多。 而状态管理工具 Jotai 却可以很好的解决这些问题。 最近的业务和组件场景里 也在用此方式实现。 2. React Context 的不足 常规解决数据透传通常使…

BUUCTF 之 [ACTF2020 新生赛]Exec(命令执行漏洞)

BUUCTF 之 [ACTF2020 新生赛]Exec&#xff08;命令执行漏洞&#xff09;相关观察进攻相关 项目内容难度简单类型WEB靶场BUUCTF坐标Exec观察 这界面和这网页标题结合起来&#xff0c;相信给位都能猜到这个靶场中很有可能存在命令执行漏洞。 进攻 构造如下语句显示当前路径中的…

Learning Monocular Visual Odometry via Self-Supervised Long-Term Modeling

Paper name Learning Monocular Visual Odometry via Self-Supervised Long-Term Modeling Paper Reading Note URL: https://arxiv.org/pdf/2007.10983.pdf TL;DR ECCV 2020 文章&#xff0c;该文章认为在短时间序列上训练无法在长时间序列上良好泛华&#xff0c;所以受到…

从Web3视角审视茅台的“元宇宙”APP,这或是中国版的“星巴克奥德赛”

图片来源&#xff1a;由无界 AI 绘画工具生成2023年1月1日&#xff0c;一款名为《巽风数字世界》的APP登录App Store&#xff0c;这是由茅台和网易联合推出的虚拟世界APP。因而&#xff0c;有媒体称&#xff0c;茅台要进军元宇宙了&#xff01;简单讲&#xff0c;这是一款虚拟世…

Spring核心与设计思想 -- IoC与DI

Spring核心与设计思想 -- IoC与DI一、Spring 是什么&#xff1f;1.1 什么是容器&#xff1f;1.2 什么是 IoC&#xff1f;二、理解 IoC2.1 传统程序开发的问题2.2 分析2.3 控制反转式程序开发2.4 对比总结规律2.5 理解 Spring IoC三、DI 概念说明一、Spring 是什么&#xff1f; …

k8s集群部署springboot项目

一、前言 本篇,我们将基于k8s集群,模拟一个比较接近实际业务的使用场景,使用k8s集群部署一个springboot的项目,我们的需求是: 部署SpringBoot项目到阿里云服务器 ;基于容器打包,推送私有镜像仓库 ;采用K8S集群部署,对外暴露服务,pod副本扩容,公网可以访问 ;二、完…

【案例教程】GEE遥感云大数据在林业中的应用

以Earth Engine&#xff08;GEE&#xff09;为代表全球尺度地球科学数据&#xff08;尤其是卫星遥感数据&#xff09;在线可视化计算和分析云平台应用越来越广泛。该平台存储和同步遥感领域目前常用的MODIS、Landsat和Sentinel等卫星影像、气候与天气、地球物理等方面的数据集超…

禅道的部署与使用

文章目录1、禅道介绍2、下载安装3、使用3.1、创建项目3.2、添加用户3.3、团队管理3.4、测试人员提Bug3.5、开发人员修复Bug4、总结1、禅道介绍 官网地址&#xff1a;https://www.zentao.net禅道是专业的研发项目管理软件&#xff0c;有如下特点&#xff1a; 细分需求、任务、缺…

一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(七)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

Redis简介与使用

Redis简介与使用:数据保存在内存。&#xff08;mysql数据保存在硬盘&#xff09;是一个 高性能的key-value数据库NoSQL&#xff08;非关系数据库&#xff09;和SQL数据库&#xff08;关系数据库&#xff09;比较&#xff1a;适用场景不同:sql数据库适合用于关系特别复杂的数据查…

Java8-

https://blog.51cto.com/u_14014612/5677262 Stream到底是什么呢&#xff1f; 是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 “集合讲的是数据&#xff0c;Stream讲的是计算&#xff01;” 流的构成 当我们使用一个流的时…

贴片SD卡移植FATFS文件系统

一、前言 手头有一块深圳雷龙的 SDIO 接口的贴片 SD 卡&#xff0c;挂载个文件系统把玩一下。首先介绍一下使用的贴片 SD 卡&#xff0c;以前使用的都是拔插式的 SD 卡&#xff0c;下面这个样子&#xff1a; 拿到的贴片雷龙 SD 卡如下图&#xff1a; 二、贴片 SD 卡介绍 雷龙的…

RAD Studio 11.2 详细图文安装教程 (delphi 11.2)

准备 准备好安装镜像和嘿嘿工具 镜像可以到官网下载&#xff0c;工具百度搜一搜就能找到 系统环境&#xff1a;win11 专业版 开始安装 双击镜像文件&#xff0c;然后将里面的文件复制到一个地方 注意一定要把这两个文件复制出来再运行&#xff0c;否则会嘿嘿失败 右键点击红色…

前有农民歌唱家大衣哥,后有农民女歌手草帽姐,都给山东人增光了

山东自古以来是孔孟之乡礼仪之邦&#xff0c;也诞生了很多的好儿女&#xff0c;农民歌唱家大衣哥就是其中的一位。大衣哥是从《星光大道》走红&#xff0c;也是大山东人的骄傲&#xff0c;他出名十几年不忘本&#xff0c;扎根农村为老乡们做贡献的精神&#xff0c;也感动了无数…

从0到1完成一个Vue后台管理项目(五、登录页,mock,token,axios封装)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

两大js调试工具的安装

首先要确保已经安装nodejs&#xff0c;具体安装步骤可以百度。 node-inspect工具的安装和使用 对于node-inspect工具我们可以全局安装&#xff1a; npm install node-inspect -g由于安装过cnpm&#xff0c;所以几乎在1秒内将node-inspect安装完成。 cnpm的安装方法&#xff…

Multisim14.0仿真应用举例——OCL电路输出功率和效率的研究

安装教程&#xff1a;http://t.csdn.cn/qvvqA一、理论讲解OCL全称: Output Capacitorless&#xff0c;中文名称:无输出电容的功率放大电路。功率放大带电路最重要的技术指标是最大输出功率Pom和效率η 。若输入信号Ui为正弦信号sin(wt)&#xff0c;负载上能得到的最大输出电压且…

你是真的“C”——详解C语言实现静态版通讯录

详解C语言实现静态版通讯录&#x1f60e;前言&#x1f603;通讯录设计的关键思想点分析 &#x1f64c;通讯录界面&#xff08;meun&#xff09;设计 &#x1f64c;增加信息功能实现代码&#x1f64c;删除信息功能实现代码&#x1f64c;查询信息功能实现代码&#x1f64c;修改信…

【强训】Day04

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. 计算糖果2. 进制转换答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 下列与队列结构有关联的是&#xff08;&#xff09; A 函数的递归调用 B 数组元素的引用 C 多重循环的执行…

【年终总结系列 2022】魔幻、疲惫、收获与成长

时光飞逝&#xff0c;转眼到了2022年的年末了。仿佛昨天还在看冬奥的开幕式&#xff0c;而第一次做核酸又似乎很遥远&#xff0c;生活像是一瞬间恢复了喧嚣&#xff0c;可能是三年之期已到吧。这一年于我们大众而言我愿称之为魔幻的一年&#xff0c;于我自己而言&#xff0c;则…