LibEcto.Ksuid (lib_ecto v0.4.0)
View SourceKSUID (K-Sortable Unique Identifier) 生成和解析模块
KSUID 是一种可排序的唯一标识符,由时间戳和随机数据组成。 结构:4字节时间戳 + 16字节随机数据,Base62编码后27字符。
特点
- 时间排序:基于时间戳的排序能力
- 高唯一性:使用随机数据确保唯一性
- URL安全:使用Base62编码,可在URL中安全使用
- 高效存储:二进制表示高效紧凑
使用示例
# 生成KSUID
ksuid = LibEcto.Ksuid.generate()
# 使用自定义时间戳生成KSUID
timestamp = System.system_time(:second)
ksuid = LibEcto.Ksuid.generate(timestamp)
# 解析KSUID
{:ok, timestamp, random_bytes} = LibEcto.Ksuid.parse(ksuid)
Summary
Types
@type parse_result() :: {:ok, NaiveDateTime.t(), binary()} | {:error, binary()}
解析结果,成功返回时间戳和随机数据,失败返回错误信息
@type t() :: binary()
KSUID 字符串表示形式,Base62编码,27字符长度
@type timestamp() :: non_neg_integer()
表示自Unix纪元以来的秒数的非负整数
Functions
生成一个新的KSUID。
可选参数允许提供自定义时间戳,默认使用当前系统时间。
参数
ts- 可选的时间戳(Unix秒数)。默认为当前系统时间。
返回值
返回生成的KSUID字符串,Base62编码,27字符长度。
示例
iex> ksuid = LibEcto.Ksuid.generate()
iex> is_binary(ksuid) and String.length(ksuid) == 27
true
iex> ksuid = LibEcto.Ksuid.generate(1632304869)
iex> is_binary(ksuid) and String.length(ksuid) == 27
true
@spec parse(binary()) :: parse_result()
解析KSUID字符串,提取时间戳和随机数据部分。
参数
ksuid- 要解析的KSUID字符串
返回值
成功时返回 {:ok, timestamp, random_bytes},其中:
timestamp- NaiveDateTime格式的时间戳random_bytes- 16字节的随机数据
失败时返回 {:error, reason}
示例
iex> ksuid = LibEcto.Ksuid.generate()
iex> {:ok, timestamp, random_bytes} = LibEcto.Ksuid.parse(ksuid)
iex> is_struct(timestamp, NaiveDateTime) and byte_size(random_bytes) == 16
true