我一直想知道生成唯一ID的正确做法是什么?事情是在我的Web应用程序中,我将有一个插件系统,当用户注册一个插件时,我想为其生成一个唯一的序列号。我一直在考虑将所有数字存储在数据库或服务器上的文件中,生成一个随机数,并检查它是否已存在于数据库/文件中,但这似乎不那么理想。还有其他方法吗?使用UUID是首选方法吗?

最佳答案

如果这些id是面向用户的(看起来好像是面向用户的),那么您希望它们很难猜测。使用内置的UUID类,该类为您生成随机ID,并可以为您很好地设置格式。提取:

UUID idOne = UUID.randomUUID();
UUID idTwo = UUID.randomUUID();
log("UUID One: " + idOne);
log("UUID Two: " + idTwo);


输出示例:

UUID One: 067e6162-3b6f-4ae2-a171-2470b63dff00
UUID Two: 54947df8-0e9e-4471-a2f9-9af509fb5889


提供的链接中还有其他解决方案。我认为它可以很好地比较这些方法,因此请选择最适合您需求的一种。

另一个有趣的方法是MongoDB所使用的方法,但这可能对于您的需求而言是过大的:


BSON ObjectID是一个12字节的值
包含4个字节的时间戳
(自纪元以来的秒数),一个3字节
机器ID,2字节的进程ID和一个
3字节计数器。请注意
时间戳记和计数器字段必须为
存储的大字节序不同于其他
BSON


如果他们不是面向用户的,则可以将其留给数据库以执行自动递增的id:1、2、3等。

09-04 03:36
查看更多