我寫Android應用給每個客戶端長的用戶ID通過以下公式:生成隨機長的用戶ID
long userID = (long) (Math.random() * 2 * Long.MAX_VALUE - Long.MAX_VALUE);
我是否利用正確MAX_VALUE即採取一切可能的長值的優勢?
我有兩個重複的用戶ID與10k,100k或1m用戶的機會是什麼?我怎麼計算這個?
我寫Android應用給每個客戶端長的用戶ID通過以下公式:生成隨機長的用戶ID
long userID = (long) (Math.random() * 2 * Long.MAX_VALUE - Long.MAX_VALUE);
我是否利用正確MAX_VALUE即採取一切可能的長值的優勢?
我有兩個重複的用戶ID與10k,100k或1m用戶的機會是什麼?我怎麼計算這個?
您可以使用以下提到的那些中任一個產生隨機UUID:
而不是使用隨機獲得一個長期用戶ID,使用以毫秒錶示的當前日期和時間。
使用隨機UUID
或者同時使用(時間戳+隨機)。這將使衝突極不可能 –
日期和時間+1,因爲這是保證不重複。然而,它會在一定程度上將用戶ID個性化。 –
感謝與uuid的提示,這似乎是我正在尋找。 所以我應該同時使用128位隨機uuid以及64位時間戳? –
可以使用randomUUID()
https://github.com/bigfatsea/SUID簡單唯一標識符
您可能希望在同一個實例重複的ID136年後,對於中小型項目不夠好。
例:
long id = SUID.id().get();
你應該使用新的隨機()nextLong();相反... –
在使用所有可能值的一半之後,您可以期待第一個重複項(假設您有適當的隨機算法),所以在您的情況下它可能是'2^34'值。這就是爲什麼使用UUID(128位)更好的原因如下。或者,您可以使用無衝突(無重複保證)的長ID,例如Twitter Flake Id生成器。 – Tom
謝謝湯姆,這就是我想知道的。 我不希望有那麼多用戶,所以在我的情況下,我認爲使用128位隨機uuid足夠安全。我會寫一個待辦事項,以便在稍後階段我會讓我的服務器檢查重複的用戶。 –