mysql 订单号主键_关于订单编号 业务主键的生成

今天,项目经理咨询我订单编号的随机生成,希望有一个随机产生绝对不重复的办法,实在是没有。。。。不敢打包票一定guid不产生重复,我这方面属于保守派,我所能想到的只有:

1、大多数程序员在用的单库单表单行序号记录,用锁行+1方式来获取

2、redis kv对事务 替代上面的办法

3、将a或者b方法加权,比如加个1-2位字母,变成a1 b1,业务上不需要绝对次序只需要高性能的单库序号生成可以考虑,随机a-n号,挂上a-n甚至aa-zz这类,随机选择一个行来锁这样就避免了大家抢一个行锁,

4、用高性能的第三方提供方式这个各种语言都有,不过小规模项目没人肯用 哈哈哈

5、其实guid足够满足这个情况,只是长了点,也没序,真心没办法,只是不敢打包票一定不重复,虽然理论上简直是陨石撞你头的几率

6、时间戳精确到毫秒再加一段随机数甚至是截取一段guid,本质上跟guid的方案并无区别,有的情况这样足够用并且够用了,随机种子也随机撞车几率有,但是普通项目没啥可能性,不过我是不愿意打这种包票

补:20170208

2、redis lua脚本支持、递增递减命令等都行

4、比如推特的snowflake 有各种语言版本的实现

7、很多项目里长整型数字段,比如 1000开始 后面补满一个bigint(long)那么长,这样1000-9999能分出8、9k个分段加上一些位用特殊的有意义的数字id来组成,就是现在常见的能识别很多信息的长整型主键值了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值