雪花算法生成分布式主键ID

直接上代码,复制即可使用

public class SnowflakeIdGenerator {private static final long START_TIMESTAMP = 1624000000000L; // 设置起始时间戳,2021-06-18 00:00:00private static final long DATA_CENTER_ID_BITS = 5L;private static final long WORKER_ID_BITS = 5L;private static final long SEQUENCE_BITS = 12L;private static final long MAX_DATA_CENTER_ID = ~(-1L << DATA_CENTER_ID_BITS);private static final long MAX_WORKER_ID = ~(-1L << WORKER_ID_BITS);private static final long MAX_SEQUENCE = ~(-1L << SEQUENCE_BITS);private static final long DATA_CENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS;private static final long WORKER_ID_SHIFT = SEQUENCE_BITS;private static final long TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATA_CENTER_ID_BITS;private static long dataCenterId;private static long workerId;private static long sequence = 0L;private static long lastTimestamp = -1L;public static void init(long dataCenterId, long workerId) {if (dataCenterId > MAX_DATA_CENTER_ID || dataCenterId < 0) {throw new IllegalArgumentException(String.format("Data center ID can't be greater than %d or less than 0", MAX_DATA_CENTER_ID));}if (workerId > MAX_WORKER_ID || workerId < 0) {throw new IllegalArgumentException(String.format("Worker ID can't be greater than %d or less than 0", MAX_WORKER_ID));}SnowflakeIdGenerator.dataCenterId = dataCenterId;SnowflakeIdGenerator.workerId = workerId;}public static synchronized String generateId() {long timestamp = System.currentTimeMillis();if (timestamp < lastTimestamp) {throw new RuntimeException("Clock moved backwards. Refusing to generate id for " + (lastTimestamp - timestamp) + " milliseconds.");}if (timestamp == lastTimestamp) {sequence = (sequence + 1) & MAX_SEQUENCE;if (sequence == 0) {timestamp = waitNextMillis(timestamp);}} else {sequence = 0L;}lastTimestamp = timestamp;return String.valueOf(((timestamp - START_TIMESTAMP) << TIMESTAMP_LEFT_SHIFT)| (dataCenterId << DATA_CENTER_ID_SHIFT)| (workerId << WORKER_ID_SHIFT)| sequence);}private static long waitNextMillis(long timestamp) {long currentTimestamp = System.currentTimeMillis();while (currentTimestamp <= timestamp) {currentTimestamp = System.currentTimeMillis();}return currentTimestamp;}public static void main(String[] args) {SnowflakeIdGenerator.init(1, 1);for (int i = 0; i < 10; i++) {System.out.println("Snowflake ID: " + SnowflakeIdGenerator.generateId());}}
}

在这个示例中,你可以通过 SnowflakeIdGenerator.init(dataCenterId, workerId); 初始化数据中心 ID 和工作 ID,然后通过 SnowflakeIdGenerator.generateId(); 静态方法生成 Snowflake ID 的字符串形式。

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

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

相关文章

【医学大模型】临床推理 + 大模型,推理感知型诊断框架

临床推理 大模型&#xff0c;推理感知型诊断框架 提出背景Module II-1: 少数样本CoT推理Module II-2: 单模态学生蒸馏Module II-3: 多模态学生蒸馏 提出背景 论文&#xff1a;https://arxiv.org/pdf/2312.07399.pdf 这篇文章提出了一种新的诊断框架&#xff0c;专注于利用大型…

Android T 远程动画显示流程其二——动画的添加流程(更新中)

前言 接着上篇文章分析 Android T 远程动画显示流程其一 切入点——处理应用的显示过渡 下面&#xff0c;我们以从桌面点击一个应用启动的场景来分析远程动画的流程&#xff0c;窗口添加的流程见Android T WMS窗口相关流程 这里我们从AppTransitionController.handleAppTran…

HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例

HAL STM32 HW I2C DMA SSD1306/SH1106驱动示例 &#x1f4cd;硬件I2C DMA驱动参考&#xff1a;https://blog.csdn.net/weixin_45065888/article/details/118225993 &#x1f4cc;github上的相关项目&#xff1a;https://github.com/taburyak/STM32_OLED_SSD1306_HAL_DMA &am…

C++知识点总结(19):高级贪心算法

高级贪心算法 一、P1803 活动安排1. 审题2. 思路2.1 最优区间挑选方法2.2 分配时间方法2.3 排序方法 3. 参考答案 二、P1094 纪念品分组1. 审题2. 思路2.1 每组多少个方法2.2 搭配的方法 3. 参考答案 三、村民打水1. 审题2. 思路3. 参考答案 四、习题1. 服务等待1.1 审题1.2 参…

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…

Linux服务器安装MySQL8

进入安装目录 /usr/local下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz解压,重命名 tar -Jxvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xzmv mysql-8.0.20-linux-glibc2.12-x86_64 mysql8创建用户组、用户 # 需要…

fastApi笔记01-路径参数

路径参数 使用与 Python 格式化字符串相同的语法来声明路径"参数"或"变量" from fastapi import FastAPIapp FastAPI()app.get("/items/{item_id}") def read_item(item_id):return {"item_id": item_id} http://127.0.0.1:8000/i…

SpringSecurity安全框架

我们使用这个springSecurity安全框架,作用是认证,授权,将用户的权限和对应的资源进行绑定,默认的是在内存中保存的,实际开发中,是需要根据项目业务的需求对某些方法进行重写,使数据库中权限对应的资源进行绑定,就是查看当前登录的用户所扮演的角色,该角色有哪些权限 授权 1内…

【操作系统】

计算机操作系统 计算机是如何让用户得到好的体验什么是操作系统&#xff08;OS&#xff09;操作系统如何管理 计算机是如何让用户得到好的体验 计算机系统是由计算机硬件和软件组成的。用户使用计算机&#xff0c;比如在文本文件填写内容&#xff0c;通过邮箱发送邮件&#xf…

Aloudata StarRocks 直播预告:指标平台的物化加速实践

数据指标的管理、研发和应用一直存在着诸多痛点&#xff0c;这些挑战促使了对指标平台解决方案的需求不断增长。2月29日&#xff08;星期四&#xff09;19:00&#xff0c;Aloudata 将与 StarRocks 携手举办线上直播&#xff0c;深入揭秘第三代指标平台物化加速的强大能力&#…

大蟒蛇(Python)笔记(总结,摘要,概括)——第10章 文件和异常

目录 10.1 读取文件 10.1.1 读取文件的全部内容 10.1.2 相对文件路径和绝对文件路径 10.1.3 访问文件中的各行 10.1.4 使用文件的内容 10.1.5 包含100万位的大型文件 10.1.6 圆周率中包含你的生日吗 10.2 写入文件 10.2.1 写入一行 10.2.2 写入多行 10.3 异常 10.3.1 处理Ze…

基于springboot+vue的课程答疑系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

think-cell Round 1 (A~C)

think-cell Round 1 目录&#xff1a;A B C A题&#xff1a;Maximise The Score 标签: 贪心&#xff08;greedy&#xff09;排序&#xff08;sortings&#xff09; 题目大意 有一个长度为 2n&#xff0c;数值为 1 − 1e7 的数组a&#xff0c;可执行如下操作: 每步在a中选择两…

什么是AI、AIGC、PGC、AGI

AI AI&#xff0c;全名 “Artificial Intelligence”&#xff0c;中文为人工智能。 它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 AIGC &#xff08;Artificial Intelligence Generated Content&#xff09;是人工智能生成…

RAID 故障修复,重启,卸载,备份

RAID 10 故障修复 当 RAID 10 发生故障了一块硬盘怎么办&#xff1f; 1. 模拟挂掉一块硬盘&#xff0c;从RAID 10 的四块硬盘组中&#xff0c;剔除一块硬盘 # 查寻 sd 相关的磁盘 rootlongchi:~# fdisk -l | grep sd[a-z] Disk /dev/sda: 100 GiB, 107374182400 bytes, 20971…

外站群服务器的特性及使用优势

随着互联网的快速发展&#xff0c;站群服务器在网站运营中扮演着越来越重要的角色。相较于国内站群服务器&#xff0c;国外站群服务器因其独特的特性和使用优势&#xff0c;受到了众多网站管理员的青睐。本文将对国外站群服务器的特性及使用优势进行科普介绍。 一、国外站群服务…

【Spring Cloud】实现微服务调用的负载均衡

文章目录 什么是负载均衡自定义实现负载均衡启动shop-product微服务通过nacos查看微服务的启动情况自定义实现负载均衡 基于Ribbon实现负载均衡添加注解修改服务调用的方法Ribbon支持的负载均衡策略通过修改配置来调整 Ribbon 的负载均衡策略通过注入Bean来调整 Ribbon 的负载均…

JS进阶——解构赋值

数组解构 基本&#xff1a; let [a, b, c] [1, 2, 3]; // a 1 // b 2 // c 3 可嵌套 let [a, [[b], c]] [1, [[2], 3]]; // a 1 // b 2 // c 3 可忽略 let [a, , b] [1, 2, 3]; // a 1 // b 3 不完全解构 let [a 1, b] []; // a 1, b undefined 剩余运…

如何创造价值写给自己的笔记

人工智能统领全文 在深入探讨这篇概述之前&#xff0c;我们首先需要理解一个核心观点&#xff1a;生产力的进步与生产关系的变革是相辅相成的。这一点在历史的长河中不断得到验证&#xff0c;从工业时代到信息时代&#xff0c;再到如今由人工智能引领的新时代&#xff0c;每一…

探索D咖智能饮品机器人的工作原理:科技、材料与设计的相互融合

智能饮品机器人是近年来随着人工智能和自动化技术的发展而崭露头角的一种创新产品。它将科技、材料和设计相互融合&#xff0c;为消费者带来了全新的饮品体验。下面D咖来探索智能饮品机器人的工作原理&#xff0c;以及科技、材料和设计在其中的作用。 首先&#xff0c;智能饮品…