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的主键生成策略, 据说效率与原生主键一样, ^_^ ^_^ 没试过。