在我的python/pyramid应用程序中,我让用户生成存储在亚马逊s3存储区中的html页面。我希望每个页面都有一个单独的路径,如www.domain.com/2cxj4kl。我已经想出了如何生成随机字符串来放入网址,但我更关心重复。我如何根据现有字符串列表检查每个字符串,以便不会覆盖任何内容?我可以将每个字符串放入字典或数组中,并且每次创建新字符时都要检查不断增长的数组/字典吗?是否存在持续增长这样一个对象的问题,并且它会永久存在于应用程序内存中?我怎样才能做到这一点?如何在每次创建页面时生成一定长度的随机url?
3
A
回答
5
在一些存储器中存储的现有标识符的列表,以及比较新的标识符与列表的方法将在一个简单的情况下工作但是,如果您必须存储数十亿个标识符,或者您想在多台计算机上生成这些标识符,则这可能会变得棘手。这也使存储列表,检索,比较等事情变得复杂。更不用说锁定了 - 如果两个用户决定在同一秒创建一个页面,该怎么办?
通用唯一标识符(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随机的,但仍然是一个碰撞的机会会大大降低比如说,亚马逊数据中心的看门人机会很渺茫,用斧头摧毁您的服务器并将数据中心设置为火灾:)
1
我是新来的Python和编程,但这里的几个问题我可以用“随机字符串”的想法看:
你很可能最终遍地产生相同的字符串,如果你正在使用短字符串。另一方面,如果你使用的是更长的字符串,获取相同字符串的变化就会减少。但是,无论在哪种情况下,您都需要注意重复。因此,我的建议是对你需要多少网址进行一些估算,并使用最佳的字符串长度。
最简单的方法是让这些URL列表中,并用一个简单的,如果检查注册新的之前:
if new_url in url_list: generate_new_url() else: url_list.append(new_url)
但是它也听起来像是你将要采用数据库永久保存您的网址。在大多数基于SQL的数据库中,您可以将url列设置为“唯一”;因此数据库阻止你有dublicate网址。
我不知道,但与数据库,你也许可以做到这一点:
try: #insert value to database except: generate_new_url()
相关问题
- 1. 如何生成一个随机数,每次都是唯一的
- 2. 如何在每次使用母版页时生成ASP.NET页面?
- 3. 生成随机长度的零
- 4. 如何在Go中生成一个固定长度的随机数?
- 5. 生成一个字符串的随机固定长度排列
- 6. 生成一个固定长度的随机数
- 7. 如何创建随机URL?
- 8. 每次调用变量时,如何生成随机数字?
- 9. 无法获取每次创建对象时生成的随机数
- 10. 每次刷新页面时如何获取3个随机行?
- 11. 如何在Javascript中创建一个url随机数发生器?
- 12. 生成随机的,固定长度的字节数组在Go
- 13. 生成随机,单次使用URL
- 14. 生成具有随机行长度的随机二维数组
- 15. 要生成一个随机的,一次性使用的URL
- 16. 如何在Haskell中创建一个随机布尔生成器?
- 17. 如何停止除第一次以外的每次生成的随机?
- 18. 伪随机的URL生成
- 19. 如何生成随机数与蟒蛇的具体长度
- 20. 如何从短随机数生成更长的随机数?
- 21. OTP S/KEY - 种子如何生成,每次都是随机的?
- 22. 如何从给定范围生成固定长度值的随机列表?
- 23. 随机数生成的每一行
- 24. 从给定字符生成等长的固定长度的随机字符串
- 25. 在节点中生成自定义长度的唯一随机字符串
- 26. 如何在C++中一次生成不同的随机数?
- 27. 使用Node.js生成随机数页面
- 28. 如何在clojure中随机生成一个长整数
- 29. Magento生成随机URL
- 30. 随机函数在德尔福创建一个长度范围
伟大的隐喻。 – 2013-03-08 01:08:54
这是一个很好的答案。 shortuuid对此更好。 – BigBoy1337 2013-03-09 05:17:51