您的位置:

Java UUID详解

UUID是一个通用唯一标识符(Universally Unique Identifier),用来识别信息中的某个元素,具有唯一性和无序性。Java中的UUID是由一组32个十六进制数字组成,共36位长度,其中包括4个“-”符号。

一、UUID生成方式

Java中提供了两种UUID生成方式:基于时间戳的UUID和随机UUID。

1、基于时间戳的UUID

import java.util.UUID;

public class UUIDTest {
    public static void main(String[] args) {
        UUID uuid = UUID.randomUUID();
        System.out.println(uuid);
    }
}

通过调用UUID类中的randomUUID()方法可以生成一个基于时间戳的UUID。

2、随机UUID

import java.util.UUID;

public class UUIDTest {
    public static void main(String[] args) {
        UUID uuid = UUID.fromString("38400000-8cf0-11bd-b23e-10b96e4ef00d");
        System.out.println(uuid);
    }
}

通过调用UUID类中的fromString(String name)方法可以生成一个随机UUID。

二、UUID的唯一性

UUID可以保证在全球范围内的唯一性,因为其生成方式与时间、MAC地址等因素有关,几乎可以排除重复的可能性。但是在极少数情况下,还是存在重复UUID的可能性,这种情况下建议使用其他方法来确保唯一性。

三、UUID在数据库中的应用

在数据库中,UUID可以作为主键标识一个数据行,由于其唯一性,可以避免数据重复问题,同时可以方便的做到分布式架构中数据的统一唯一标识。

CREATE TABLE `user` (
  `id` varchar(36) NOT NULL,
  `name` varchar(50) NOT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

使用UUID作为主键的样例代码:

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.UUID;

public class UUIDTest {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "root";
        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            String sql = "INSERT INTO user (id, name, age) VALUES (?, ?, ?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            UUID uuid = UUID.randomUUID();
            ps.setString(1, uuid.toString());
            ps.setString(2, "张三");
            ps.setInt(3, 20);
            ps.executeUpdate();
            System.out.println("插入成功!");
            ps.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

使用UUID作为主键插入数据时,需要先通过UUID.randomUUID()方法生成一个UUID,再将其转为字符串类型存入数据库中。

四、UUID的应用场景

UUID主要应用于以下场景:

  • 作为数据库主键。
  • 用于分布式应用系统中的唯一标识。
  • 在WEB应用中,存储在Cookie中,确保多个站点之间的用户认证。
  • 在Java类库中,用于确保对象的唯一标识。

五、UUID的优缺点

1、优点

  • UUID全球唯一,可以避免关键数据重复的情况。
  • UUID可以作为分布式系统的唯一标识,消除了ID冲突的问题。
  • UUID用途广泛,适用于很多场景。

2、缺点

  • UUID使用字符串存储,占用的存储空间较大,如果作为主键,会对性能造成一定的影响。
  • 查询速度慢,需要对UUID进行索引优化。