更多互联网新鲜资讯、工作奇淫技巧关注原创【飞鱼在浪屿】(日更新)
ksuid是一个高效,全面,经过测试的Go库,用于生成和解析一种称为KSUID的特定类型的全局唯一标识符。
安装
go get -u github.com/segmentio/ksuid
KSUID用于K稳定唯一标识符。它是一种类似于RFC 4122 UUID的全局唯一标识符,它是从头开始构建的,可以按生成时间戳“自然”排序,而无需任何特殊的类型识别逻辑。
简而言之,通过UNIX sort命令将按生成时间排序的一组KSUID列表。
为什么要使用KSUID?
生成唯一标识符的方法有很多,那么为什么要使用KSUID?
- 自然地按生成时间排序
- 无冲突,无协调,无依赖
- 高度可移植
即使只有这些属性中的一项对您很重要,KSUID也是一个不错的选择!:)许多项目选择使用KSUID只是因为文本表示形式易于复制和粘贴。
按生成时间自然排序
与普遍使用的UUIDv4不同,KSUID包含时间戳组件,该组件使它们可以按生成时间进行松散排序。二进制表示形式和文本表示形式都将按创建时间进行排序,而无需任何特殊的排序逻辑。
2.无冲突,无协调,无依赖
尽管RFC 4122 UUIDv1确实包含了时间分量,但是没有足够的随机字节来提供强大的保护以防止冲突(重复)。借助如此低的熵,恶意方猜测生成的ID是可行的。
为了适应64位数字空间,Snowflake ID 及其派生要求进行协调以避免冲突,这大大增加了部署的复杂性和操作负担。
KSUID包括128位伪随机数据(“熵”)。此数字空间比公认的RFC 4122 UUIDv4标准使用的122位大64倍。附加的时间戳分量可以被认为是“附加熵”,其进一步减小了碰撞的可能性,以至于在任何实际实现中都是物理上不可行的。
高度可移植
文本和二进制表示形式可按字典顺序排序,这使它们可以放入本机不支持KSUID并保留其按时间顺序排列的属性的系统中。
文本表示形式是字母数字base62编码,因此它“适合”任何可接受的字母数字字符串。由于不使用任何定界符,因此,当字符串格式的KSUID由专为人类可读的文本设计的软件进行表示时,不会被无意地截断或标记化,这是RFC 4122 UUID文本表示的常见问题。
KSUID如何工作?
二进制KSUID为20字节:32位无符号整数UTC时间戳和128位随机生成的有效负载。时间戳使用big-endian编码,以支持字典排序。时间戳记时间调整为2014年3月5日,使用寿命超过100年。有效负载由加密强度高的伪随机数生成器生成。
文本表示形式始终是27个字符,以字母数字base62编码,将按时间戳按字典顺序排序。
安装命令行客户端
go install github.com/segmentio/ksuid/cmd/ksuid
生成KSUID
$ ksuid
0ujsswThIGTUYm2K8FjOOfXtY1K
$ ksuid -n 4
0ujsszwN8NRY24YaXiTIE2VWDTS
0ujsswThIGTUYm2K8FjOOfXtY1K
0ujssxh0cECutqzMgbtXSGnjorm