首页 新闻 会员 周边

高并发时如何生成唯一编号

0
悬赏园豆:10 [待解决问题]

在实际开发中,高并发情况下是如何生成一个订单号的(长度在25位)?

“QY”+13位时间戳+10位随机数字组合可以吗?

Jakeylove3的主页 Jakeylove3 | 初学一级 | 园豆:192
提问于:2017-12-31 11:01
< >
分享
所有回答(7)
0

当然不可以.生成唯一单号的方法有很多.和并发也没什么关系,和服务器数量有关.最简单的是

时间+ID,id生成方法有很多,可以用数据库的.可以用推特的id算法

吴瑞祥 | 园豆:29449 (高人七级) | 2017-12-31 11:44

您看是这个吗,http://tieba.baidu.com/p/5202320032,使用的时候直接实例化获取id么?

支持(0) 反对(0) Jakeylove3 | 园豆:192 (初学一级) | 2017-12-31 13:57
0

 如果一定要加上一个唯一性,建议生成后查找一遍,看是否存在,随机数的情况很有可能重复。

大楚打码人 | 园豆:4313 (老鸟四级) | 2017-12-31 12:26
0
dudu | 园豆:31007 (高人七级) | 2017-12-31 15:33
0

snowflake

redis自增

Daniel Cai | 园豆:10424 (专家六级) | 2017-12-31 17:36
0

只需要加上机器信息(计算一个数字)和进程信息(ID),就不怕重复了。毕竟你没有要求连续。

幻天芒 | 园豆:37175 (高人七级) | 2018-01-01 01:30
0

1.锁住累加;(总计累加)

2.时钟设备精度大于cpu工作1/频率,然后取到小于等于该(精度)时间值,肯定不会重复。(时间累加,至于伪随机数,实际也是通过时间精度来完成的)。同样原理,你可以取时间时多几个指令周期,那么精度要求可以降低 —— 实际上相当于cpu降频了。

花飘水流兮 | 园豆:13560 (专家六级) | 2018-01-02 09:25
0

 把方法放到wcf或webservice里,用lock锁住,然后随你搞,性能细节问题慢慢优化

jqw2009 | 园豆:2439 (老鸟四级) | 2018-01-09 15:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册