具体详解请看:http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8%87%AA%E5%A2%9Eid%E7%AE%97%E6%B3%95%E8%AF%A6%E8%A7%A3/
代码来源于网络:
public class IdWorker { //http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8%87%AA%E5%A2%9Eid%E7%AE%97%E6%B3%95%E8%AF%A6%E8%A7%A3/ /*snowflake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号) 一共加起来刚好64位,为一个Long型。(转换成字符串长度为18) snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。据说:snowflake每秒能够产生26万个ID。*/ private final long twepoch = 1288834974657L; private final long workerIdBits = 5L; private final long datacenterIdBits = 5L; private final long maxWorkerId = -1L ^ (-1L << workerIdBits); private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); private final long sequenceBits = 12L; private final long workerIdShift = sequenceBits; private final long datacenterIdShift = sequenceBits + workerIdBits; private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; private final long sequenceMask = -1L ^ (-1L << sequenceBits); private long workerId; private long datacenterId; private long sequence = 0L; private long lastTimestamp = -1L; public IdWorker(long workerId, long datacenterId) { if (workerId > maxWorkerId || workerId < 0) { throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); } if (datacenterId > maxDatacenterId || datacenterId < 0) { throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); } this.workerId = workerId; this.datacenterId = datacenterId; } public synchronized long nextId() { long timestamp = timeGen(); if (timestamp < lastTimestamp) { throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); } if (lastTimestamp == timestamp) { sequence = (sequence + 1) & sequenceMask; if (sequence == 0) { timestamp = tilNextMillis(lastTimestamp); } } else { sequence = 0L; } lastTimestamp = timestamp; return ((timestamp - twepoch) << timestampLeftShift) | (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence; } protected long tilNextMillis(long lastTimestamp) { long timestamp = timeGen(); while (timestamp <= lastTimestamp) { timestamp = timeGen(); } return timestamp; } protected long timeGen() { return System.currentTimeMillis(); } public static void main(String[] args) { IdWorker idWorker = new IdWorker(0, 0); for (int i = 0; i < 1000; i++) { long id = idWorker.nextId(); System.out.println(id); } } }
相关推荐
Snowflake算法是由Twitter开源的一种高效且可扩展的分布式ID生成方案,广泛应用于Java和其他编程语言的系统中。 Snowflake算法的核心思想是将64位的整数划分为不同的部分,分别为: 1. **时间戳**(41位):自定义...
**雪花算法(Snowflake算法)** 雪花算法是由Twitter开源的一种分布式ID生成算法,它能够为分布式系统中的每个实体生成全局唯一的、单调递增的64位整数ID。这种算法在大数据和分布式环境下广泛应用于主键生成,因为它...
A library which uses to generate Global Unique Ids based on snowflake,An alternative of UUID. Usage allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { compile ...
该项目为基于Snowflake算法的Java实现,用于在K8s容器扩容过程中生成唯一的机器ID。项目源码包含101个文件,其中79个为XML配置文件,10个为Java源文件,3个为PNG图片文件,2个为gitignore文件,2个为iml文件,2个为...
Snowflake算法就是一种被广泛使用的分布式ID生成方案,它由Twitter开源,具有时间戳、工作机器ID和序列号三部分组成,能够确保在分布式环境下生成的ID具有唯一性、有序性和高性能。 Snowflake算法的核心思想是将64...
Twitter-Snowflake算法,java代码实现,采用默认配置,单例单机模式
Delphi Snowflake 算法是一种分布式ID生成器,它基于Twitter的Snowflake算法实现,主要用在分布式系统中生成全局唯一且有序的ID。在理解Delphi Snowflake算法之前,我们先简单回顾一下Twitter的Snowflake算法。 ...
动态生产有规律的ID Snowflake算法是Twitter的工程师为实现递增而不重复的ID实现的 C# 实现 Snowflake算法
最近项目需要解决高并发分布式生成唯一ID值的问题,经过考虑,采用Snowflake算法,该算法是一个很有效的办法,具体的可以自己百度,这里是基于thinkPHP5 开发的通用的生成器,其实也是参考了网上的方法,只是增加了...
..java工11具类之UniqueID生成(SnowFlake算法).docx
..java工11具类之UniqueID生成(SnowFlake算法).pdf
该项目为基于Snowflake算法的分布式唯一ID生成器UidGenerator在SpringBoot框架中的整合与应用设计,源码包含41个文件,涵盖27个Java源文件、5个XML配置文件、2个Idea项目配置文件、1个Markdown文档、1个Git忽略文件...
Twitter Snowflake算法,php版代码; 请见博客: http://blog.csdn.net/envon123/article/details/52953872
idworker是一个基于zookeeper和snowflake算法的分布式统一ID生成工具,通过zookeeper自动注册机器(最多1024台),无需手动指定workerId和dataCenterId 怎么用 Maven < groupId>com.imadcn.framework</ groupId> ...
Snowflake算法是一种在分布式系统中生成唯一ID的方法。由Twitter开发并应用,它能够在保证ID唯一性的同时,使得ID具备一定的自增特性,非常适合需要高并发处理的分布式系统。 在分布式系统中,生成一个唯一的ID是...
一个基于Snowflake算法PHP ID生成器(Twitter已宣布)。描述雪花算法PHP实现。 Snowflake是一项网络服务,可通过一些简单的保证大规模生成唯一的ID号。 第一位是未使用的符号位。 第二部分包括一个41位的时间戳...
防止产生的时间比之前的时间还要小(由于NTP回拨等问题),保持增量的趋势.
We have retired the initial release of Snowflake and working on open sourcing the next version based on Twitter-server, in a form that can run anywhere without requiring Twitter's own infrastructure ...
现在,我们将深入探讨Snowflake算法以及C#版本的实现。 Snowflake算法将64位ID分为以下几个部分: 1. **时间戳**(41位):自Twitter定义的起始时间(2010年1月1日)以来的毫秒数。这提供了大约69年的ID生成空间。...