当前位置: 首页 > 科技观察

高并发下如何生成唯一的订单号?

时间:2023-03-21 18:44:34 科技观察

本文转载自微信公众号《UP技控》,作者conan5566。转载本文请联系UP技控公众号。一个软件系统必定处处充斥着各种文档,也必然有各种文档号与之对应。比如:电商行业的订单号、支付流水号、退款单号等。SCM采购单号、采购单号、发货单号、库存号等。在企业或2C平台中,不可避免地要通过一定的单据号进行沟通。所以一个好的证件号一定要便于沟通。那么如何创建一个全球唯一的证件编号。1.单系统使用对象///

///单号助手///publicclassBillNoHelper{//////防止创建类实例///privateBillNoHelper(){}privatestaticreadonlyobjectlocker=newobject();privatestaticint_sn=0;//////生成文件编号//////publicstaticstringGenerateId(){lock(locker)//lock关键字确保当一个线程处于代码的临界区时,另一个线程不会进入该临界区。{if(_sn==9999){_sn=1;}else{_sn++;}returnDateTime.Now.ToString("yyMMddHHmmss")+_sn.ToString().PadLeft(4,'0');}}//////唯一值//////publicstaticstringguid(){returnGuid.NewGuid().ToString().Replace("-","");}//////GuidExtension/////////publicstaticstringIsNum(Guidguid){vars=guid.ToString();varsb=newStringBuilder();for(inti=0;i///生成key12个字母+数字//////publicstaticstringGenerateCouponKey()//{strings;lock(locker2){if(_sn2==9999999){_sn2=1;}else{_sn2++;}s=$"Qq@,.*745u787#$@,.><;'{DateTime.Now.Ticks}{_sn2}";}returnMD5_16(s);}privatestaticstringMD5_16(stringp_str){System.Security.Cryptography.MD5md5=System.Security.Cryptography.MD5.Create();byte[]data=System.Text.Encoding.Default.GetBytes(p_str);字节[]md5Data=md5.ComputeHash(数据);stringstrResult=System.BitConverter.ToString(md5Data,4,8);md5.Clear();strResult=strResult.Replace("-","").ToUpper();returnstrResult;}#endregion}2.数据的唯一索引利用数据库索引的特性生成唯一id。3、使用redis分布式锁同一时间只能有一个客户端获取锁,其他客户端不能同时获取锁。一定时间后,必须释放锁(正常释放或非正常释放)