0

我有一个带有属性的 Post 模型token

SecureRandom.urlsafe_base64(length_of_token)用来创建令牌。

令牌不需要不可猜测,但必须是唯一的。

我从 1 个字符长的标记开始,当它们全部用完(所有 64 种组合)时,我应该继续使用 2 个字符长的标记。

我应该如何检查 3 个字符长的标记是否有任何标记变体?

4

1 回答 1

2

它会是这样的:

64**n - Post.count(:token).where('char_length(token) = ?', n)

第一部分给出可能的组合数,第二部分给出记号长度为 n 的记录数。

但不要忘记您的随机生成器不一定会生成剩余的可能组合。随着时间的推移,会有越来越多的冲突发生,因此我强烈反对这种实现方式。

注意:该char_length语句是 MySQL 特定的,因此根据您的 RDBMS,您必须调整这部分。

于 2016-06-15T11:35:57.077 回答