如何生成唯一UUID

1. 使用 UUID 生成随机 ID

UUID (Universally Unique Identifier) 是一种广泛使用的生成唯一标识的方法,生成的 ID 具有很高的唯一性。UUID 生成的随机 ID 由 32 个字符组成,可以避免重复。

import java.util.UUID;

public class UserService {
    public String generateRandomUserId() {
        return UUID.randomUUID().toString().replace("-", ""); // 去掉 UUID 中的 "-"
    }
}

2. 使用时间戳与随机数组合生成 ID

可以将当前时间戳与一个随机数拼接来生成一个唯一的用户 ID。这种方法可以生成较短的 ID,同时也避免重复。

import java.util.Random;

public class UserService {
    public String generateRandomUserId() {
        long timestamp = System.currentTimeMillis();
        int randomNum = new Random().nextInt(99999);
        return timestamp + String.format("%05d", randomNum); // 时间戳 + 5 位随机数
    }
}

3. 使用雪花算法生成分布式唯一 ID

雪花算法(Snowflake)生成的 ID 适合分布式系统,具有递增和唯一性。可以使用一些开源的实现库,如 Hutool 中的雪花算法工具。

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;

public class UserService {
    private Snowflake snowflake = IdUtil.createSnowflake(1, 1);

    public long generateRandomUserId() {
        return snowflake.nextId();
    }
}

若要使用 Hutool 中的雪花算法工具,需要添加 Hutool 的依赖。

pom.xml 中添加:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.20</version> <!-- 使用最新稳定版本 -->
</dependency>

IdUtil.createSnowflake(1, 1) 中传递的两个参数代表了 数据中心 ID机器 ID,这是雪花算法生成唯一 ID 所需的参数,用来标识分布式系统中的不同节点,以确保每个节点生成的 ID 是唯一的。

参数含义

  1. 数据中心 ID (datacenterId):第一个参数(1)代表数据中心 ID。它用于标识数据中心。值的范围通常在 0-31 之间。

  2. 机器 ID (workerId):第二个参数(1)代表机器 ID。它用于标识同一数据中心下的不同机器。值的范围也通常在 0-31 之间。

雪花算法 ID 结构

雪花算法的 64 位 ID 通常由以下几个部分组成:

  • 1 位符号位:始终为 0
  • 41 位时间戳:表示时间,精确到毫秒。
  • 5 位数据中心 ID:用于区分不同的数据中心,最多支持 32 个数据中心。
  • 5 位机器 ID:用于区分同一数据中心下的不同机器,最多支持 32 台机器。
  • 12 位序列号:用于在同一毫秒内生成多个不同的 ID,最多支持每毫秒生成 4096 个不同的 ID。

示例

如果你的系统分布在一个数据中心,且运行在单台机器上,你可以设置 IdUtil.createSnowflake(0, 0)。如果有多个节点,确保每个节点的数据中心 ID 和机器 ID 不同,以避免 ID 冲突。

4. 将生成的 ID 设置到用户表

生成 ID 后,可以在用户插入数据时将生成的 ID 作为主键或唯一标识字段的值:

User user = new User();
user.setId(generateRandomUserId()); // 使用生成的 ID
user.setName("Example User");
userMapper.insert(user); // 插入用户数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值