如何生成唯一码

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

草稿方案

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

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

生成策略

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

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

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

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

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


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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,001评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,637评论 25 708
  • 在如今快速发展的社会,感情这东西总是来去匆匆,很多感情总是不经意间就消逝于平凡的生活。 读完了杨绛先生的《我们...
    映迹海阅读 404评论 0 2
  • God kisses the finite in his love and man the infinite. 神...
    我是呜呜阅读 774评论 0 2
  • 大家好,这里是创业解惑,今天与大家聊的话题是:揭秘互联网社会的赚钱逻辑。 互联网不仅仅是一个行业。互联网明显已经颠...
    创业解惑阅读 387评论 0 0