如何生成唯一码

唯一码,也许在开发中不常用,但是一旦用上往往会出现在核心业务里面。例如订单号,邀请码,会员卡号,消息id等等。

草稿方案

1.最简单方案,以年月日时分秒+几位随机数

2.如果唯一码有长度限制那就尴尬了,例如只允许5位,这个时候降低生成唯一码重复率就十分重要了。

生成策略

1.预生成策略,这种策略优势在于0重复率,特别适合短唯一码,但是预先生成就意味着占用空间。

2.实时生成策略,这种策略在于节省存储空间,但是必须使用一些经过优化的算法来生成唯一码。

如何保证生成是唯一的呢?

最简单的的,生成之后保存下来,下次生成判断一下是否存在即可。但是在并发请求下就需要加锁处理了。所以保险起见还是用单进程单线程吧。

如果你真的要在并发下生成,可以考虑利用一下数据库,用唯一值约束检验一下。性能那就没办法保证了。


如果使用预分配策略的话,只需要内部维护一个计数器,每次请求计数器加一,然后作为下标拿分配的唯一码就好。计数器如何维护呢,单进程单线程下程序一个变量作为计数器即可。并发情况下可以考略redis的队列,push方法可以拿到长度,或者使用数据库的自增主键。

一些个人实验过或者猜想过或者听说过的方案

1.简单随机生成,依靠数据库唯一约束,失败则重复生成

2.预分配几百万个唯一码,依靠数据库自增主键作为下标获取

3.构造一个唯一的URL,然后调用第三方的短网址生成,后面那部分可是唯一的。

你可能感兴趣的:(如何生成唯一码)