java Uuid学习

本文介绍了一个简单的UUID生成器类,并探讨了UUID在数据库中作为主键的优劣。UUID确保了在不同时间和空间中生成的标识符的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.apusic.string;

import java.util.UUID;

public class UuidGenetor {

public static String getUuid(){
String uuid = UUID.randomUUID().toString();
return uuid;
}

/**
* 返回uuid数组
* length 为数组的长度
*/
public static String[] getUuidArray(int length){
if(length<1){
return null;
}
String[] uuidArray = new String[length];
for(int i=0; i<length; i++){
uuidArray[i] = getUuid();
String str = uuidArray[i].replace("-", "");
System.out.println(str);
}
return uuidArray;
}


public static void main(String[] args) {
getUuidArray(5);
}

}


理论说明:
UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的, 基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。


关于使用UUID作为数据库主键的优劣分析:
优点:
1、 便于指定比较个性化的主键,如我想每个主键都是以"yao"开头的,那么我就可以采取“yao"+uuid的形式
2、 能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

缺点:
1、 比较占地方,和INT类型相比,存储一个UUID要花费更多的空间
2、 使用UUID后,URL显得冗长,不够友好(但此处有时也能成为优势)
3、 性能问题:数据在索引的时候效率会随着体积的增加而降低,但也有许多数据库有针对uuid的主键生成策略, 据说效率与原生主键一样, ^_^ ^_^ 没试过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值