手工客

关注公众号 shougongke

关闭
手工客 > 区块链 > 正文

tnfy.link ID生成详解:短链接生成策略与最佳实践

OKX欧易App

OKEX欧易APP下载

注册欧易okex交易所,领取价值6万元盲盒奖励!

APP下载  官网注册

欢迎阅读本文,这是关于tnfy.link系列的第二篇文章,重点探讨URL缩短服务的核心策略。

短链接生成的关键在于为每个长URL创建一个唯一、简短且易于输入的ID。此外,该ID还需具备不可预测性以防止被猜测。具体来说,它需要满足以下几个条件:

经过研究,总结了四种主要的短链接生成方法,下面逐一分析。


1. 随机字节法

随机字节法是最直接的方法,通过生成随机字节并进行编码来生成短链接。

伪随机数

Go语言中的math/rand包提供了伪随机数生成器(PRNG)。虽然这种方法在许多场景下足够使用,但并不适合需要高安全性和不可预测性的应用。

加密安全随机数

crypto/rand包更适合生成安全的随机数。它利用系统噪声生成真正随机且不可预测的值,例如物理层面的电磁噪声。这保证了高熵,但在高负载环境下可能会降低生成速度。

随机字节编码

随机字节本身不适合作为URL,需要进行编码。常见的编码方法包括:

对于用户友好的短链接,Base58法通常是最佳选择,因为它兼顾了紧凑性和抗错性。

要点如下:


2. 哈希法

哈希法根据输入(例如长URL)生成固定长度的值。它保证了一致性,但缺乏随机性,多次缩短同一个URL会产生相同的ID。

在哈希之前添加随机盐可以引入变数,但这比直接使用随机字节更复杂且效率更低。


3. UUID法

UUID(通用唯一标识符)广泛用于生成唯一值。但其默认格式对于短链接来说太长,可以通过重新编码UUID(例如,使用Base58)来缩短长度。

NanoID是UUID的替代方案,它使用可自定义的字母表生成更短的字符串(默认21个字符),可以优化ID的可读性和抗错性。

为什么不使用UUID?UUID最终也是基于随机字节,所以相比直接生成随机值并没有显著优势。


4. 顺序法

随机值有时会导致重复,尤其是在高负载或ID较短的情况下。使用顺序计数器可以确保唯一性。Redis等工具可以使用INCR命令实现分布式计数器,但顺序ID是可预测的。

将序列与随机字节结合可以解决这个问题,既保证唯一性又保证不可预测性。

例如:

注意:ID中包含顺序组件可能会泄露生成的链接总数。


结论

本文探讨了多种短链接生成方法:

对于大多数用例,使用Base58编码的随机字节法就足够了。为了处理高负载场景下的冲突,可以将随机字节与顺序组件结合。

感谢您的阅读!欢迎分享您对链接生成方法的看法和经验。

如果您对短链接生成技术感兴趣,还可以了解其他相关主题,例如如何优化短链接存储和管理。

阅读全文