我们正在为我们的网站构建 URL 缩短功能。
我们目前提出的内容:
- 我们获取一个 URL ( http://www.google.com ) 并对其进行 sha1 处理,最终得到一个 40 个字符的哈希 (738ddf35b3a85a7a6ba7b232bd3d5f1e4d284ad1)。
- 我们获取 sha1 哈希并将其编码为 base62(基本上是 AZ、az、0-9)并最终得到一个 28 个字符的哈希(jNMYchEoche67ro1k5gsCcHfDzmR),我们可以将其解码回原始 sha1。
我们使用 sha1 的原因是确保用户无法从当前/过去的 URL 中猜测下一个 URL。
我们使用 base62 的原因是为了使 URL 对用户有效且可读。
现在,将附加到我们的域 ( http://www.google.com/r/jNMYchEoche67ro1k5gsCcHfDzmRis ) 的 28 个字符的“短 URL”有点太长了,尤其是考虑到 Twitter 的字符限制时。
我们目前正在考虑将 sha1 减少大约 20 个字符,这将产生一个 14 个字符的短 url,但如果再减少,我们担心我们会很快遇到冲突。
我们还考虑过将大数字(或字符串)压缩为小值,但这需要我们将 28 或 14 个字符的散列分成 2 部分并对这些部分进行排序,我们不知道如何从那里返回原始散列。
有人知道我们能做什么吗?我们更喜欢不依赖数据库来构建 URL 的解决方案,但如果需要数据库,请记住我们仅限于 Redis / MongoDB(这意味着没有自动增量整数字段)。