java - 为用户创建一个在多次重启后保持不变的唯一编号的最佳方法是什么

标签 java performance

我正在构建一个应用程序(在 Java 中),我想为自己提供一些性能测量。我正在计时多个长时间运行的进程,并且我有一个用于接收指标的 Web 服务器,但是我想为特定用户创建一个唯一的数字(我的程序不需要已登录)在计算机上。

因此,如果 Joe 登录到计算机 A 并运行我的应用程序,它会给他一个唯一编号,例如 1234。然后如果 Jane 登录到同一台计算机,它将使用不同的编号,例如 4321。但是如果 Joe 登录到计算机 B,它会完全创建一个单独的数字,比如 5678。另外(只是为了澄清)如果乔重新登录到计算机 A,它仍然会产生数字 1234。

另外,为了让它更具挑战性,如果同一台计算机在不同的网络上,那么我最好想要一个不同的 ID。

这些数字是任意的,并且会比这更长。到目前为止,我的代码生成 8akb7d3n7lp1i1jo6apfhegp593kja5hg38b6o1a5godm38g97omm7bmc3jekc6apopgjhf9g 作为我的 UID 来自:

try {
    byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
    String names = new BigInteger(mac).toString(16) + InetAddress.getLocalHost().getHostAddress() + get("user.name") + get("os.version") + get("java.vendor");
    BigInteger uid = new BigInteger(names.getBytes());
    thisUsersUid = uid.toString(26);
} catch (SocketException ex) {
    Logger.getLogger(TimingLogger.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnknownHostException ex) {
    Logger.getLogger(TimingLogger.class.getName()).log(Level.SEVERE, null, ex);
}

我不希望这些信息容易阅读(因为您可能会想到 names="-f4b86eb8ee1192.168.0.20lee10.6.8Apple Inc.")所以我将添加一个哈希函数对此。

所以我的问题是,在所有这些宣传之后:这是一个好的方法吗?有没有比这更好的图书馆?还是我想要的太多了?

提前致谢(即使是那些说:为什么?)

最佳答案

你可以使用 UUIDs .

在 Java 中:UUID id = UUID.randomUUID();

关于java - 为用户创建一个在多次重启后保持不变的唯一编号的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11068187/

相关文章:

java - 倒数计时器如何实现onfinish方法

java - @ResponseBody 注解在响应中重置 header

performance - 如果是 Chrome,请使用 WebP

performance - g++ 编译选项 -g 调试和 -O 优化

java - Micronaut 多级 bean 验证

java - HQL 嵌套子查询

java - 将xml文件转换为jrxml文件

javascript - Javascript 中的 For 循环优化

c# - 代码性能 : SQL Server Query vs C#.Net web 应用程序

php - SQL Count + 3 join + multiple where in one query - 如何编写 propen IF?