【发布时间】:2020-08-14 08:43:33
【问题描述】:
我正在向我们的公共和私有 API 添加相关 ID。这是为了能够通过日志跟踪请求进度。 UUID 是长字符串,占用大量空间。我需要一个紧凑的替代 UUID 作为相关 ID。
如果相关 ID 在修复期(比如 2 个月)后重复出现,那没关系,因为不再需要跟踪比这更早的 API 请求。
我考虑过使用java.util.Random nextLong()。但不保证不会重复。
此外,SecureRandom 可能会造成一些性能问题,这是我的理解,而且我不需要相关 ID 是安全的。
最好考虑其他选项。
【问题讨论】:
-
不使用/首选 UUID 的原因是什么?我见过使用 UUID 作为跟踪 id 的服务(也许你可以用时间戳作为后缀)
-
UUID 字符串很大,所以,为了节省日志空间,我想要其他选择。
-
时间戳(纪元)是一个选项,但不是唯一的(我假设您想将它用于跨机器运行的服务)
-
如何使用时间戳,例如
System.currentTimeMillis()或System.nanoTime()?两种方法都返回一个long。 -
另外,如果不是 UUID 的长度,那么对于您的目的来说,可接受的 ID 长度是多少?