ulid生成

1. ULID 与 UUID 的对比

 ULID(Universally Unique Lexicographically Sortable Identifier)

软件开发中,唯一标识符(Unique Identifier,简称 UUID)扮演着非常重要的角色,用于保证数据的唯一性和标识对象。UUID 是一串由 16 字节组成的字符序列,通常使用标准的 36 个字符表示法(例如:550e8400-e29b-41d4-a716-446655440000)。然而,传统的 UUID 存在一些问题,比如无法按时间排序、长度较长等。

为了解决这些问题,ULID(Universally Unique Lexicographically Sortable Identifier)应运而生。ULID 是由 Alizain Feerasta 在 2016 年提出的一种可排序的随机标识生成方式。与传统的 UUID 相比,ULID 具有以下优点:

1.1 可排序性

ULID 能够根据生成时的时间戳进行排序,使得生成的标识能够按照时间顺序排列,并且支持范围查询和快速索引。

1.2 长度更短

ULID 使用 26 个字符的 Base32 编码表示,相比标准的 UUID 使用的 36 个字符长度更短,减少网络传输和存储的开销。

1.3 高性能

由于 ULID 可以根据时间戳排序,它非常适合在分布式系统中使用,尤其是在高并发环境下,可以有效减少冲突和竞争。

尽管 ULID 的冲突概率很低,但并不能保证完全唯一。因此,在高度依赖唯一性的场景中,仍建议使用更长的 UUID。

2. ULID 的结构

ULID 的结构由两部分组成:时间部分和随机数部分。如果在短时间内生成多个 ULID,那么结果可能是这样:

01H69Y96VND6PYACNN2P0RX2RV

01H69Y96VN8QBBYS7QNFK3BC6F

01H69Y96VNM8CMCY0Y2PMPYJY7

01H69Y96VNDD5D8PNMR736TB84

01H69Y96VN9KY23BVBW1Y8NQJV

具体而言,一个 ULID 标识符包含了以下信息:

2.1 时间戳

ULID 使用 48 位存储时间戳,精确到毫秒级别。时间戳表示生成 ULID 的时间,且是自增的,因此可以用来对 ULID 进行排序。

2.2 随机数

ULID 使用 80 位的随机数部分来提高唯一性。这部分随机数通过加密强度较高的随机数生成器产生,确保了生成的 ULID 具有高度的唯一性。

为了更好地可视化 ULID,通常将其表示为一个由 26 个字符组成的字符串。其中,前面部分包含了时间戳信息,后面部分是随机数,均使用 Base32 编码表示。

ULID 是一个特定的标识符格式,具有特定的字符长度和字符集。生成的 ULID 应该是唯一的且按字典顺序可排序的

shell命令生成ulid

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 26 | head -n 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值