在程序里经常都需要生成一些特定格式的 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
这是生成 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
问题内容: 任何人都知道一些有关如何为hibernate创建自定义ID生成器的好教程吗? 问题答案: 在Google上粗略搜索“hibernate自定义ID生成器教程”,发现了以下可能性。我排除了那些看起来没有用的内容,并总结了它们的内容。 http://www.devx.com/Java/Article/30396-涵盖了在数据保留之前生成ID(因此还没有业务密钥)的问题。 http://doc
问题内容: 有人知道如何从1开始生成,以便下一个对象具有2,依此类推吗? 我尝试了以下方法,但不起作用: 问题答案: 您需要一个 静态的 类成员来跟踪上次使用的索引。确保还实现一个复制构造函数: 更新: 正如@JordanWhite建议的那样,您可能希望使static计数器成为 atomic ,这意味着可以安全地同时使用(即一次在多个线程中使用)。为此,将类型更改为: 增量读取和复位操作变为:
问题 你想随机生成一个唯一的标识符。 解决方案 可以根据一个随机数值生成一个 Base 36 编码的字符串。 uniqueId = (length=8) -> id = "" id += Math.random().toString(36).substr(2) while id.length < length id.substr 0, length uniqueId() # =
我有表,当我添加新行时,我想计算一个id号。 条件: 如果我有缺失的数字,请给出最小的一个(3),如果我没有缺失的数字,请给出一行中的下一个数字(5) 如何将此条件构建到查询中? 我的查询: 桌子 如果我缺少id,则解决方案 如果我没有丢失的id,则解决方案
有时我们需要能够生成类似MySQL自增ID这样不断增大,同时又不会重复的id。以支持业务中的高并发场景。比较典型的,电商促销时,短时间内会有大量的订单涌入到系统,比如每秒10w+。明星出轨时,会有大量热情的粉丝发微博以表心意,同样会在短时间内产生大量的消息。 在插入数据库之前,我们需要给这些消息、订单先打上一个ID,然后再插入到我们的数据库。对这个id的要求是希望其中能带有一些时间信息,这样即使我
我需要一个自定义id生成器,保存最后使用的id,而不是下一个可用的,所以基于这个答案https://stackoverflow.com/a/10648572/187423我创建了一个自定义生成器扩展TableGenerator。 我已经在调试模式下确定我的自定义生成器没有被添加到org.hibernate.id.factory.internal.DefaultIdfierGeneratorFact