- 浏览: 304039 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- linux (31)
- java (144)
- mysql (52)
- html (19)
- oracle (8)
- sql (12)
- 无题 (5)
- js (16)
- android (4)
- tomcat (4)
- struts (2)
- spring (12)
- elcipse (2)
- shell (7)
- interview (2)
- redis (6)
- apache (2)
- maven (10)
- mq (6)
- kengen (0)
- windows (3)
- css (1)
- nginx (2)
- google (1)
- zk (1)
- ibm (1)
- git (1)
- mvn (1)
- jms (1)
- uml (1)
最新评论
package com.netty.test.netty4.tool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class IdWorker { protected static final Logger LOG = LoggerFactory.getLogger(IdWorker.class); private long workerId; private long datacenterId; private long sequence = 0L; private long twepoch = 1288834974657L; private long workerIdBits = 5L; private long datacenterIdBits = 5L; private long maxWorkerId = -1L ^ (-1L << workerIdBits); private long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); private long sequenceBits = 12L; private long workerIdShift = sequenceBits; private long datacenterIdShift = sequenceBits + workerIdBits; private long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; private long sequenceMask = -1L ^ (-1L << sequenceBits); private long lastTimestamp = -1L; public IdWorker(long workerId, long datacenterId) { // sanity check for workerId 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; LOG.info(String.format( "worker starting. timestamp left shift %d, datacenter id bits %d, worker id bits %d, sequence bits %d, workerid %d", timestampLeftShift, datacenterIdBits, workerIdBits, sequenceBits, workerId)); } public synchronized long nextId() { long timestamp = timeGen(); if (timestamp < lastTimestamp) { LOG.error(String.format("clock is moving backwards. Rejecting requests until %d.", 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(); } }
发表评论
-
adfasdfsdf
2017-03-23 08:38 502package com.twsz.creative.elv ... -
经典技术书籍
2016-12-08 11:00 423这个列表包括了 100 多本经典技术书籍,涵盖:计算机系统 ... -
分割字符串
2016-11-18 18:57 508@Test public void test2() { ... -
BD音乐部分接口
2016-11-15 15:45 685歌曲ID 详细信息接口:http://tingapi.ti ... -
限速器
2016-09-30 16:28 493package test.date; import ... -
Maven SCOPE
2016-09-29 23:34 390在Maven的依赖管理中, ... -
Spring BOOT生成web项目
2016-08-29 17:46 806https://github.com/spring-pro ... -
获取IP地址
2016-08-29 17:31 582import java.net.Inet4Address; ... -
Java Performance Tuning Guide
2016-08-29 15:14 338http://java-performance.info/ ... -
Nexus
2016-08-26 00:51 4132、创建解压目录,并将apache-maven-3.0-b ... -
Chain
2016-08-25 12:25 358public static void main(Strin ... -
Spring Boot
2016-08-23 12:50 516package com; import org.sp ... -
JAVA Seriesization
2016-08-16 15:28 515http://www.th7.cn/Program/And ... -
字节码
2016-08-12 19:42 479http://www.blogjava.net/libin ... -
回调在JSMTemplate的位置
2016-08-11 21:55 325package test; public class ... -
原生activeMQ支持
2016-08-10 20:40 428http://www.cnblogs.com/xwdrea ... -
activeMQ
2016-08-09 13:06 392http://www.open-open.com/lib/ ... -
logback
2016-08-05 10:45 485logback logback.xml常用配置详解(二)& ... -
uml
2016-08-03 21:32 361UML建模语言7种图(以银行ATM系统为例) http: ... -
过滤字符串
2016-07-25 18:08 646/** 日志对象 **/ private static ...
相关推荐
Twitter的Snowflake是一种分布式ID生成算法,用于在大规模分布式系统中生成全局唯一的、有序的64位整数ID。这个算法由Twitter开源,解决了在分布式环境下如何生成具有时间序列属性且不重复的ID的问题。现在,我们将...
Twitter的 Snowflake 推特雪花算法JAVA实现方案,用于自动生成id
Twitter Snowflake算法,php版代码; 请见博客: http://blog.csdn.net/envon123/article/details/52953872
Twitter_Snowflake,SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。
laravel-snowflake就是Laravel对这个算法的实现,它能够生成类似于Twitter Snowflake的64位ID,这些ID由时间戳、工作节点ID和序列号三部分组成,确保了全局唯一性。 1. **雪花算法(Snowflake)详解** - **时间戳*...
Twitter Snowflake算法是一种广泛使用的ID生成方案,其设计思路巧妙,能有效地解决高并发环境下的ID生成问题。这个项目将Twitter Snowflake算法集成到了Redis模块中,使得ID生成服务更加高效和便捷。 **Twitter ...
开源项目-bwmarrin-snowflake.zip,bwmarrin/snowflake - A very simple package to generate or parse Twitter snowflake IDs
描述中的"一个实现Twitter SnowFlake算法的Go分布式UID生成器"进一步确认了该程序的功能,即它是一个基于Twitter SnowFlake算法的 UID 生成器,而且是用Go语言编写的,这表明它可能具有良好的性能和并发处理能力,...
描述中提到,“本算法的实现参考了Twitter Snowflake”,这意味着dedid生成器使用了类似于Twitter Snowflake的策略。Snowflake算法是一种基于时间戳、工作节点ID和序列号的分布式ID生成方案,确保在分布式环境中产生...
使用Twitter的 Snowflake算法,有兴趣可以了解一下这个算法: https://github.com/twitter/snowflake php.ini的配置项: [ukey] ukey.datacenter = integer ukey.worker = integer ukey.twepoch = uint64...
twitter snowFlake 算法的golang实现
为了解决这个问题,Twitter提出了一个叫做“Snowflake”的ID生成算法,它能够生成全局唯一的64位ID。而"Laravel开发-laraflake"正是基于Twitter的Snowflake算法为Laravel框架提供的一种扩展包。 首先,让我们了解...
Twitter-Snowflake算法,java代码实现,采用默认配置,单例单机模式
【Java实现Twitter的分布式自增ID算法snowflake】 在分布式系统设计中,生成全局唯一ID是一个常见的需求。Twitter的Snowflake算法就是为了解决这个问题而诞生的,它提供了一种高效、有序且不会冲突的ID生成策略。...
`laravel-snowflake` 是一个专门为 Laravel 设计的扩展包,它引入了 Twitter 的 Snowflake ID 生成算法,旨在为 Laravel 应用提供高效且具有时间序列性质的全局唯一 ID。 **1. Snowflake 算法介绍** Snowflake 算法...
可以采用Snowflake算法或者分布式ID服务如Twitter的Twitter Snowflake,阿里云的UUidGenerator等。 8. **负载均衡与集群**:为了处理大量并发请求,应用需要部署在多台服务器上形成集群,通过负载均衡器(如Nginx)...
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 ...
Twitter开源的Snowflake算法是一种常用的分布式ID生成策略,它将ID分为三部分:时间戳(41位)、工作机器ID(10位)和序列号(12位)。通过这种方式,可以保证ID的全局唯一性,并且有序。 #### 3.2 UUID UUID...
##### Twitter Snowflake方案 Twitter在迁移存储系统时面临类似的问题,于是开发了Snowflake系统。Snowflake的核心特点在于其高度可扩展性和高性能。 1. **ID结构**:生成64位的ID,分为三个部分:41位的时间戳...