生成唯一 ID

2022-09-02 20:24:38

我需要为我的应用程序生成唯一的 ID。当我使用时,我得到了一个代码(认为这将是唯一的),这是非常漫长的。(UUID.randomUUID()).toString()

我不确定当我们在Java Timestamp或随机字符串的帮助下生成代码时,它会有多独特。

我需要生成长度仅为8-10个字符(字母数字)的唯一代码。如何做到这一点?我正在使用MySQL数据库。

在数据库端生成唯一代码是最好的方法,还是我们可以在Java中生成如此短(但唯一)的代码?

任何包含示例代码的建议都将非常有帮助。


答案 1

我使用方法从来实现这一点:RandomStringUtils.randomAlphanumeric()commons-lang

import org.apache.commons.lang.RandomStringUtils;

public static final int ID_LENGTH = 10;

public String generateUniqueId() {
    return RandomStringUtils.randomAlphanumeric(ID_LENGTH);
}

如果使用 Maven,请确保已添加到项目的依赖项:commons-lang

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>

在数据库端生成唯一代码是最好的方法,还是我们可以在java中生成如此短(但唯一)的代码?

这取决于你和你的项目。id 生成是业务逻辑的一部分吗?如果是,并且所有逻辑都写在Java上,那么把它写在Java上。如果全部或部分逻辑委托给数据库,那么就在那里生成id(但在这种情况下,您将对特定数据库有很强的依赖性)。


答案 2

您是否需要考虑任何特定的限制?例如跨应用程序的唯一性?因为否则,MySQL本身就完全能够生成ID,您需要做的就是定义一个自动增量列,而不是在插入时指定它(这意味着,为其插入一个值) - 这将使MySQL用下一个可用的ID填充它,唯一且不需要您做任何工作。NULL

它不会是一个字母数字字符串(我不确定你是否指定为要求或限制),但如果你所需要的只是唯一性,那就绰绰有余了。8 - 10 个字母数字字符不足以保证随机生成的字符串的唯一性,因此您必须对数据库执行插入检查。


推荐