Node-AnyID万能 ID 生成器
在程序里经常都需要生成一些特定格式的 id ,每种场合的需求都可能有些不一样,虽然写起来代码不复杂,但零零碎碎的东西做多了也挺烦的,于是设计了这个用于 node.js 的万能 ID 生成器。
AnyID 生成的 ID 为字符串(也可以纯数字),信息密度尽可能的高,也就是用最少的位数表示尽量多的信息。
AnyID 设计的首要考虑原则是 API 的直观易用。看看这些例子:
指定长度,随机值填充
21 个字符,包含大写小写字母和数字。 这个 ID 的碰撞可能性跟 type 4 (random) UUID 一样低。
const ids = anyid().encode('Aa0').length(21).random() const id = ids.id(); 1LrKcmd0uk1Ma8szUxtda
多个分段
第一段根据进程号生成,第二段根据时间生成。
const ids = anyid() .encode('0A-IO') .section( anyid().fixed(process.pid) ) .delimiter('-') .section( anyid().time() );
生成的 ID 是阅读友好的:排除了字母 I
和 O
因为容易和数字 1
和 0
混淆。
008CL-00TYMZS0P3
自增序列,指定位(bit)长度
这是生成 Twitter Snowflake 风格的 ID ,包含了时间, 序列号和 worker 标识。
const ids = anyid() .encode('0') .bit(41).time().since(new Date('2016-7-1')) .bit(12).seq().resetByTime(); .bit(10).fix(workerId);
为了节省位空间,微秒时间从 2016-7-1 算起。
071243223959339218
函数值
每次生成 ID 时调用函数获得返回值。第一段是秒,第二段是纳秒。
const nanotime = () => { return process.hrtime()[1]; }; const ids = anyid() .encode('Aa0') .section( anyid().time('s') ) .delimiter('+') .section( anyid().of(nanotime) );
BlX6bX+j3Uz0
参数绑定
第一二段的值在调用时通过传入参数给出
const ids = anyid() .encode('Aa0') .section( anyid().variable('countryId') ) .delimiter('-') .section( anyid().variable('userId') ) .delimiter('-') .section( anyid().length(5).random() ); const id = ids.id({ countryId: 86, userId: 635023 }); AAABY-ACpMT-EBwQJ
评论
UidGenerator分布式 ID 生成器
UidGenerator是Java实现的,基于 Snowflake 算法的唯一ID生成器。UidGenerator以组件形式工作在应用项目中,支持自定义WorkerID位数和初始化策略,从而适用于Do
UidGenerator分布式 ID 生成器
0
CosId分布式系统 ID 生成器
CosId 通用、灵活、高性能的分布式ID生成器EnglishDocument简介CosId 旨在提供通用、灵活、高性能的分布式ID生成器。目前提供了俩类ID生成器:SnowflakeId : 单机T
CosId分布式系统 ID 生成器
0
idgo基于 MySQL 的 ID 生成器
idgo是一个利用MySQL批量生成ID的ID生成器,主要有以下特点:每次通过事务批量取ID,性能较高,且不会对MySQL造成压力.当ID生成器服务崩溃后,可以继续生成有效ID,避免了ID回绕的风险.
idgo基于 MySQL 的 ID 生成器
0