在我的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. 如何生成一個隨機數,每次都是唯一的
- 3. 需要在每次頁面加載時生成隨機字母表
- 4. 如何在每次使用母版頁時生成ASP.NET頁面?
- 5. 生成隨機長度的零
- 6. 如何創建生成隨機數
- 7. 如何在Go中生成一個固定長度的隨機數?
- 8. 如何創建隨機URL?
- 9. 生成一個固定長度的隨機數
- 10. 生成一個字符串的隨機固定長度排列
- 11. 每次調用變量時,如何生成隨機數字?
- 12. 無法獲取每次創建對象時生成的隨機數
- 13. 如何在Javascript中創建一個url隨機數發生器?
- 14. 每次刷新頁面時如何獲取3個隨機行?
- 15. 如何爲每個新頁面創建一個url和頁面
- 16. 生成隨機的,固定長度的字節數組在Go
- 17. 生成隨機X長度字符串
- 18. 生成隨機,單次使用URL
- 19. 生成具有隨機行長度的隨機二維數組
- 20. 每次頁面加載時拉出一個隨機圖像
- 21. 如何在Haskell中創建一個隨機布爾生成器?
- 22. 要生成一個隨機的,一次性使用的URL
- 23. 如何停止除第一次以外的每次生成的隨機?
- 24. 從隨機長生成隨機數
- 25. 在T-SQL生成隨機ID(固定長度)
- 26. 僞隨機的URL生成
- 27. 如何生成單位長度列的隨機n * y矩陣?
- 28. 如何生成隨機數與蟒蛇的具體長度
- 29. 如何從短隨機數生成更長的隨機數?
- 30. OTP S/KEY - 種子如何生成,每次都是隨機的?
偉大的隱喻。 – 2013-03-08 01:08:54
這是一個很好的答案。 shortuuid對此更好。 – BigBoy1337 2013-03-09 05:17:51