В вашем примере (при использовании SecureRandom.hex
с длиной по умолчанию 32) есть
16**32 = 340282366920938463463374607431768211456
возможны различные значения в шестнадцатеричном формате. Это означает, что есть шанс 1:340282366920938463463374607431768211456
создать дубликат. Этот шанс крайне низок, и имхо не имеет смысла слишком волноваться об этом.
Когда вы собираетесь сохранить этот ключ в базе данных, я бы предложил добавить уникальный индекс в этот столбец базы данных, чтобы на уровне базы данных было невозможно хранить дубликаты.
Кроме того, вы спросили, достаточно ли вашего примера кода, чтобы избежать дублирования. Ответ Нет . Это очень теоретически из-за низкой вероятности, но вы можете столкнуться с условиями гонки, в которых два задания генерируют одинаковые ключи одновременно, проверяя, что такого ключа нет в базе данных, и что оба задания хранят одинаковые значение в таблицу.
tl; dr Вероятность дубликатов крайне мала. Только уникальный индекс для столбца key
в базе данных гарантирует, что никогда не будет дубликатов (из-за условий гонки или ключей, сгенерированных в обход этого метода).