java 生成 顺序 uuid_Java 生成有序 UUID
UUID.randomUUID() 生成的 UUID 是无序的,如果作为数据主键,不利于索引
Hibernate 的 UUIDHexGenerator.generate() 方法可以生成有序的 UUID, 本文参考其实现:
public class SequentialUuidHexGenerator extends AbstractUUIDGenerator{
private static final String sep = "-";
public static String generate() {
return
format( getJVM() ) + sep
+ format( getHiTime() ) + sep
+ format( getLoTime() ) + sep
+ format( getIP() ) + sep
+ format( getCount() );
}
protected static String format(int intValue) {
String formatted = Integer.toHexString( intValue );
StringBuilder buf = new StringBuilder( "00000000" );
buf.replace( 8 - formatted.length(), 8, formatted );
return buf.toString();
}
protected static String format(short shortValue) {
String formatted = Integer.toHexString( shortValue );
StringBuilder buf = new StringBuilder( "0000" );
buf.replace( 4 - formatted.length(), 4, formatted );
return buf.toString();
}
}
UUIDHexGenerator.generate() 将 IP 放在首位,考虑到在不同的机器生成,本文将时间戳放在了首位
AbstractUUIDGenerator 代码:
public abstract class AbstractUUIDGenerator {
private static final int IP;
static {
int ipadd;
try {
ipadd = BytesHelper.toInt( InetAddress.getLocalHost().getAddress() );
}
catch (Exception e) {
ipadd = 0;
}
IP = ipadd;
}
private static short counter = (short) 0;
private static final int JVM = (int) ( System.currentTimeMillis() >>> 8 );
public AbstractUUIDGenerator() {
}
protected static int getJVM() {
return JVM;
}
protected static short getCount() {
synchronized(AbstractUUIDGenerator.class) {
if ( counter < 0 ) {
counter=0;
}
return counter++;
}
}
protected static int getIP() {
return IP;
}
protected static short getHiTime() {
return (short) ( System.currentTimeMillis() >>> 32 );
}
protected static int getLoTime() {
return (int) System.currentTimeMillis();
}
}
BytesHelper 代码:
public final class BytesHelper {
private BytesHelper() {
}
public static int toInt(byte[] bytes) {
int result = 0;
for ( int i = 0; i < 4; i++ ) {
result = ( result << 8 ) - Byte.MIN_VALUE + (int) bytes[i];
}
return result;
}
}
java 生成 顺序 uuid_Java 生成有序 UUID相关推荐
- java 8位 uuid_JAVA生成短8位UUID详解
短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUI ...
- 生成短的8位UUID(C#+JAVA)
本算法首先随机生成一个32位字符的UUID:接着,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组:然后,通过分别将他们进行模91操作,通过模运算的结果,去字典数组中索引得到相应的字符. ...
- JAVA生成20位LONG型UUID
编者在开发过程中用postman测试接口,发现要求id为必填且不能含有英文字母,问了对面开发人员才知道需要自己生成20位Long型uuid,写法大概如下,在需要生成的部分调用这个类即可. packag ...
- java中怎么把生成文件到项目根目录_[SpringBoot2.X] 02- 项目结构介绍
POM文件 继承 Spring Boot 的父级依赖,只有继承它项目才是 Spring Boot 项目. spring-boot-starter-parent 是一个特殊的 starter, 它用来提 ...
- java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成、解析、下载
java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成.解析.下载 自己用java搭建一个属于自己APP二维码合成网站.我的思路是这样的: 1.用户在前台表单提交APP的IOS和Andro ...
- bpmn 文件 服务器部署,Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题...
Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题 Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题 项目中需要前端查看流程的情况,所以需 ...
- 全局唯一递增的id_分布式ID生成方法-趋势有序的全局唯一ID
一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...
- 【java】Java运行时动态生成类几种方式
1.概述 转载:Java运行时动态生成类几种方式 这里发现自己不知道的,原来Java 还能自己编译自己,学到了. 最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则.这就要求根据数据库数据动态生 ...
- java实现后台直接生成二维码图片并直接上传到七牛云上面
java实现后台直接生成二维码图片并直接上传到七牛云上面 需求:后台是直接根据唯一核销码生成图片,然后的话直接上传到七牛云,数据库只是保存地址,一开始也想错了,想成了创建临时文件存储生成的图片再上传到 ...
- java生成随机数,生成唯一hash值
目录 java.util.Random.RandomStringUtils 常用方法: 可以使用该工具类生成唯一密钥 生成唯一hash值的其他方法:使用md5加密 java.util.Random.R ...
最新文章
- 文件查找和压缩——Linux基本命令(12)
- 人本质要好,要善良,要真诚,有格局和胸怀,有能力,有眼光,能讲故事,能找到人,能搞到钱...
- centos7 转换为lvm_[转] centos7 调整XFS格式的LVM大小
- (原)ubuntu16中编译boost1.61.0库
- 高速信号传输约翰逊 pdf_高速数字电路仿真设计与测试技术发展趋势综述 (一)...
- python代码模板_python 代码模板
- 经济专业为什么学python_既然有了会计学专业,为什么还要有税收学专业?
- bzoj 1079: [SCOI2008]着色方案
- 7种主流案例,告诉你调度器架构设计通用法则(干货!)
- 如何通过JMX远程监控Solr?
- 学习之法 —— 概念、名词、术语与定义的学习
- 三洋p6系列伺服电机说明书_苏州发那科伺服电机修理刹不住
- Java的中文转换拼音、五笔简码
- raw图各个格式之间的转换
- 落花人独立 微雨燕双飞
- Bandizip便携版右键菜单注册
- vasp计算压电系数_求助DFTP算出来的压电系数
- 如何让大学的青春少些遗憾!
- python将中文转换成utf8_如何在python中从unicode转换成utf8?
- opencv实现图片的素描化
热门文章
- 利用声子色散曲线推导刚度矩阵
- 刷单之骗人先交钱QQ,如何从qq,找到他的ip
- 超简单友盟分享(微信、QQ)+ 原生微信分享
- MyBatis防止SQL注入的方法
- ssm三个框架分别用来干什么_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- 什么思维是大数据思维,大数据思维的核心是什么?
- 手机通话断了怎么显示链接服务器,手机每次通话三分钟就自动挂断了,怎么回事啊...
- linux虚拟机系统下安装jdk
- Java对象与JSON数据的相互转换
- python大数据论文_大数据环境下基于python的网络爬虫技术