如何在Python中生成供Java程序使用的长整型UUID?

2 投票
4 回答
12103 浏览
提问于 2025-04-16 03:03

如何用Python生成一个长整型(64位,供Java程序使用)的UUID?

我看过UUID模块的相关内容,所以我试着玩了一下:

>>> import uuid
>>> uuid.uuid1().int
315596929882403038588122750660996915734L

为什么在uuid.uuid1().int生成的整数后面会有一个L?如果它是一个整数,难道不应该只有数字吗?

根据文档,uuid.uuid1().int会生成一个128位的整数。我需要的是一个长整型(供Java程序使用),这意味着它需要是64位。有没有办法生成一个64位的UUID,而不是128位的?

还有一个问题,根据Python文档,Python的int是32位,而Python的long是“无限精度”。“无限精度”是什么意思?我需要一个64位的长整型,那在Python中应该用什么类型呢?

编辑:感谢大家的回复。看起来UUID的定义就是128位。在这种情况下,我可能不应该使用UUID这个词。我想做的是生成一个长整型(64位)的唯一ID。我以为UUID可以满足这个需求,但看起来不行。

我需要这个ID作为Solr搜索引擎的文档ID。我正在使用一个实时索引的Solr插件Zoie。根据文档,“Zoie假设每个要被索引的记录必须有一个唯一键,并且类型为long

所以,考虑到我需要这个,您知道我该如何生成一个长整型的唯一ID吗?

谢谢!

4 个回答

1

UUID的标准定义是128位。

我敢说,64位是不够的,无法保证每个UUID都是独一无二的。

8

这里的L表示这是一个长整型的数值,也就是比32位的整数要大。

标准的UUID总是128位的;如果你只想要一个64位的值,你就需要使用UUID的一部分,或者选择其他的方式,而不是使用UUID。

4

根据你需要的唯一性程度,你可以生成一种自己的UUID,这种ID在一台机器上是唯一的,但不一定在所有机器上都是唯一的。

如果这个ID只需要在一个平台上是唯一的,那么你可以去掉最后的节点ID部分(最后6个字节)。

另外,你还需要考虑这些数字生成的频率。它们是每秒生成一次,还是非常频繁地生成?你可以看看这里关于UUID生成的内容,这样你就能明白我说的意思了:http://tools.ietf.org/id/draft-leach-uuids-guids-01.txt

你可能可以根据自己的情况制作一个版本,同时满足你的需求,并且轻松地控制在64位以内。

顺便提一下,“L”表示长整型,通常意味着64位长度,而不是32位。这个标记只是用来在打印数字时附加上去的。

撰写回答