在实际开发中,高并发情况下是如何生成一个订单号的(长度在25位)?
“QY”+13位时间戳+10位随机数字组合可以吗?
当然不可以.生成唯一单号的方法有很多.和并发也没什么关系,和服务器数量有关.最简单的是
时间+ID,id生成方法有很多,可以用数据库的.可以用推特的id算法
您看是这个吗,http://tieba.baidu.com/p/5202320032,使用的时候直接实例化获取id么?
如果一定要加上一个唯一性,建议生成后查找一遍,看是否存在,随机数的情况很有可能重复。
snowflake
redis自增
只需要加上机器信息(计算一个数字)和进程信息(ID),就不怕重复了。毕竟你没有要求连续。
1.锁住累加;(总计累加)
2.时钟设备精度大于cpu工作1/频率,然后取到小于等于该(精度)时间值,肯定不会重复。(时间累加,至于伪随机数,实际也是通过时间精度来完成的)。同样原理,你可以取时间时多几个指令周期,那么精度要求可以降低 —— 实际上相当于cpu降频了。
把方法放到wcf或webservice里,用lock锁住,然后随你搞,性能细节问题慢慢优化