在我的
python / pyramid应用程序中,我让用户生成存储在亚马逊s3存储桶中的html页面.我希望每个页面都有一个单独的路径,如www.domain.com/2cxj4kl.我已经想出如何生成随机字符串以放入网址,但我更关心重复.如何根据现有字符串列表检查每个字符串,以便不会覆盖任何内容?我可以将每个字符串放入字典或数组中,并在每次创建新字符串时检查不断增长的数组/字典吗?继续增长这样一个对象是否存在问题,并且它会以某种方式永久存在于应用程序内存中吗?我怎样才能做到这一点? 最佳答案 将现有标识符列表存储在某个存储中并将新标识符与列表进行比较的方法可以在一个简单的情况下工作,但是,如果您必须存储数十亿个标识符,或者如果要生成,这可能会变得棘手他们在不止一台机器上.这也使存储列表,检索,比较等事情变得复杂.更不用说锁定 – 如果两个用户决定在完全相同的秒内创建页面会怎么样?
普遍唯一的标识符(UUID)有一个very-very low chance of collision – 远低于,比如说,在接下来的五分钟内,我们的行星被黑洞吞噬的可能性.如此之低,你可以忽略它用于任何实际目的.
Python有一个名为uuid的库来生成UUID
>>> import uuid
>>> # make a random UUID
>>> u = uuid.uuid4()
>>> u.hex
'f3db6f9a34ed48938a45113ac4b5f156'
结果字符串长度为32个字符,可能对您来说太长了.
或者,您可以生成一个这样的随机字符串:
''.join(random.choice(string.ascii_letters + string.digits) for x in range(12))
在10-15个字符长的情况下,它可能不会比UUID更随机,但仍然有可能发生碰撞的可能性远远低于亚马逊数据中心的看门人精神错乱的机会,用斧头摧毁你的服务器设置数据中心火:)