閫佷綘浠ヤ笅java瀛︿範璧勬枡銆傛湁涓€绉嶆柟娉曞彲浠ュ湪鏂囩珷鏈熬鑾峰彇瀹冧滑銆傛垜浠湪缃戜笂鍙戠敓浜嗘剰澶栥€傝繖涓簨鏁呯殑琛ㄧ幇鏄繖鏍风殑锛氱郴缁熶腑鍑虹幇浜嗕袱涓浉鍚岀殑璁㈠崟鍙凤紝浣嗘槸璁㈠崟鍐呭娌℃湁鍖哄埆锛岃€屼笖绯荤粺鏍规嵁璁㈠崟鍙锋煡璇㈡椂涓€鐩存姤閿欙紝鏃犳硶姝e父鍥炶皟锛岃€屼笖涓嶆涓€娆″彂鐢熻繃锛屾墍浠ヨ繖娆$郴缁熷崌绾ф槸蹇呴』瑕佽В鍐崇殑銆備箣鍓嶅鐞嗙殑鍚屼簨涔熶慨鏀硅繃鍑犳锛屼絾鏄晥鏋滆繕鏄笉濂斤紝鎬讳細鍑虹幇鍗曞彿閲嶅鐨勯棶棰橈紝鎵€浠ヨ秮鐫€杩欎釜闂锛屽ソ濂界湅鐪嬭嚜宸卞啓鐨勪唬鐮佸悓浜嬨€傝繖閲岀畝鍗曞睍绀轰竴涓嬪綋鏃剁殑浠g爜锛?***OD璁㈠崟鍙风敓鎴?璁㈠崟鍙风敓鎴愯鍒欙細OD+yyMMddHHmmssSSS+5浣嶏紙3浣嶅晢鎴峰彿+2浣嶉殢鏈烘暟锛?2浣?/publicstaticStringgetYYMMDDHHNumber(StringmerchId){StringBufferorderNo=newStringBuffer(newSimpleDateFormat("yyMMddHHmmssSSS").format(newDate()));if(StringUtils.isNotBlank(merchId)){if(merchId.length()>3){order(No.appmerchId.substring(0,3));}else{orderNo.append(merchId);}}intorderLength=orderNo.toString().length();StringrandomNum=getRandomByLength(20-orderLength);orderNo.append(randomNum);returnorderNo.toString();}/**鐢熸垚鎸囧畾鏁板瓧鐨勯殢鏈烘暟**/publicstaticStringgetRandomByLength(intsize){if(size>8||size<1){return"";}闅忔満鏁皀e=newRandom();StringBufferendNumStr=newStringBuffer("1");StringBufferstaNumStr=newStringBuffer("9");for(inti=1;iorderNos=Collections.synchronizedList(newArrayList());IntStream.range(0,100).parallel().forEach(i->{orderNos.add(getYYMMDDHHNumber(merchId));});ListfilterOrderNos=orderNos.stream().distinct().collect(Collectors.toList());System.out.println("鐢熸垚璁㈠崟鏁帮細"+orderNos.size());System.out.println("杩囨护閲嶅鍚庣殑璁㈠崟鏁帮細"+filterOrderNos.size());System.out.println("Numberofrepeatedorders:"+(orderNos.size()-filterOrderNos.size()));}鏋滅劧锛屾祴璇曠粨鏋滃涓嬶細鐢熸垚鐨勮鍗曟暟锛?00涔嬪悗鐨勮鍗曟暟杩囨护閲嶅锛?7閲嶅璁㈠崟鏁帮細13褰撴椂鍚撲簡涓€璺仇煠竴鐧句釜骞跺彂绔熺劧鏈?3涓噸澶嶏紒锛侊紒璧剁揣璁╁悓浜嬩笉瑕佸彂鐗堬紝鎴戞帴浜嗚繖涓椿鍎匡紒杩欑値鐑殑灞辩窘锛屾兂瑕佸緱鍒颁竴涓槑纭殑瑙e喅鏂规鏄笉鍙兘鐨勩€傚ぇ姒傝姳浜?+鍒嗛挓鍜屽悓浜嬭璁轰笟鍔″満鏅紝鍐冲畾鍋氬涓嬩慨鏀癸細鍘绘帀浼犲叆鐨勫晢鎴稩D锛堟嵁鍚屼簨璇存槸涓轰簡闃叉閲嶅涓嬪崟锛屼篃浼犲叆鍟嗘埛ID锛屼絾鏄浆out琛ㄧず娌℃湁浣跨敤锛夊彧淇濈暀涓変綅姣锛堝噺灏戦暱搴︼紝淇濊瘉搴旂敤鍒囨崲涓嶅瓨鍦ㄩ噸澶嶇殑鍙兘锛変娇鐢ㄧ嚎绋嬪畨鍏ㄧ殑璁℃暟鍣ㄩ€掑鏁板瓧锛堜笁浣嶆渶浣庝繚璇佸苟鍙戞暟涓?00涓嶉噸澶嶏紝鎴戝湪浠g爜涓粰浜?浣嶏級灏嗘棩鏈熸浛鎹㈡垚java8鏃ユ湡绫昏繘琛屾牸寮忓寲锛堢嚎绋嬪畨鍏ㄥ拰浠g爜绠€娲佺殑鑰冭檻锛夌粡杩囦互涓婃€濊€冿紝鎴戞渶缁堢殑浠g爜鏄細/**ordernumbergenerate(NEW)**/privatestaticfinalAtomicIntegerSEQ=newAtomicInteger(1000);privatestaticfinalDateTimeFormatterDF_FMT_PREFIX=DateTimeFormatter.ofPattern("yyMMddHHmmssSS");privatestaticZoneIdZONE_ID=ZoneId.of("Asia/Shanghai");publicstaticStringgenerateOrderNo(){ONELocalDateTimedataTime_Time.ifLocalDateTime=nowID)(ZocalDateSEQ.intValue()>9990){SEQ.getAndSet(1000);}returndataTime.format(DF_FMT_PREFIX)+SEQ.getAndIncrement();}褰撶劧锛屼唬鐮佷笉鑳借繖涔堥殢渚垮啓瀹岋紝鐜板湪寰楀幓娴嬭瘯main鍑芥暟鐪嬬湅锛歱ublicstaticvoidmain(String[]args){ListorderNos=Collections.synchronizedList(newArrayList());IntStream.range(0,8000).parallel().forEach(i->{orderNos.add(generateOrderNo());});ListfilterOrderNos=orderNos.stream().distinct().collect(Collectors.toList());System.out.println("鐢熸垚璁㈠崟鏁帮細"+orderNos.size());System.out.println("杩囨护閲嶅鍚庣殑璁㈠崟鏁帮細"+filterOrderNos.size());System.out.println("閲嶅璁㈠崟鏁帮細"+(orderNos.size()-filterOrderNos.size()));}/**娴嬭瘯缁撴灉锛氱敓鎴愯鍗曟暟锛?000杩囨护鏉冮噸鍚庨噸澶嶈鍗曟暟锛?000閲嶅璁㈠崟鏁帮細0**/澶浜嗭紝鎴愬姛浜嗕竴娆★紝鍙互鐩存帴涓婄嚎浜嗐€?浣嗘槸鍥炶繃澶存潵鐪嬩笂闈㈢殑浠g爜锛岃櫧鐒舵渶澶х▼搴︾殑瑙e喅浜嗗苟鍙戝崟鍙烽噸澶嶇殑闂锛屼絾鏄垜浠殑绯荤粺鏋舵瀯杩樻槸瀛樺湪涓€涓綔鍦ㄧ殑闅愭偅锛氬鏋滃綋鍓嶅簲鐢ㄦ湁澶氫釜瀹炰緥锛堥泦缇わ級锛屾槸娌℃湁閲嶅锛熷彲鑳界殑锛熼拡瀵硅繖涓棶棰橈紝鍔垮繀闇€瑕佷竴涓涔嬫湁鏁堢殑瑙e喅鏂规锛屾墍浠ユ鏃舵垜鎯冲埌锛氬浣曞尯鍒嗗瀹炰緥搴旂敤璁㈠崟鍙凤紵浠ヤ笅鏄垜澶ц嚧鐨勬€濊矾鏂瑰悜锛氫娇鐢║UID锛堢涓€娆$敓鎴愯鍗曞彿鏃跺垵濮嬪寲涓€涓級浣跨敤redis璁板綍涓€涓闀跨殑ID浣跨敤鏁版嵁搴撹〃缁存姢涓€涓闀跨殑ID搴旂敤鎵€鍦ㄧ殑缃戠粶IP搴旂敤绋嬪簭鐨勭鍙e彿浣跨敤绗笁鏂圭畻娉曪紙Snowflake绠楁硶绛夛級浣跨敤杩涚▼ID锛堟煇绉嶇▼搴︿笂鏄竴绉嶅彲琛岀殑瑙e喅鏂规锛夋垜杩欓噷鎯冲埌浜嗭紝鎴戜滑鐨勫簲鐢ㄧ▼搴忚繍琛屽湪docker涓紝姣忎釜docker涓殑搴旂敤绋嬪簭绔彛container鏄竴鏍风殑锛屼絾鏄綉缁滀笉瀛樺湪閲嶅IP鐨勯棶棰橈紝涔熸湁閲嶅杩涚▼鐨勫彲鑳姐€俇UID鏂规硶浠ュ墠灏卞彈杩囪嫤銆傛壇杩滀簡锛宺edis鎴栬€匘B涔熸槸姣旇緝濂界殑鍔炴硶锛屼絾鏄嫭绔嬫€у樊銆?.鍚屾椂锛岃繕鏈変竴涓洜绱犱篃寰堥噸瑕侊紝灏辨槸鎵€鏈変笌璁㈠崟鍙风敓鎴愮浉鍏崇殑搴旂敤閮藉湪鍚屼竴鍙颁富鏈轰笂锛坙inux鐗╃悊鏈嶅姟鍣級锛屾墍浠ユ垜鐩墠鐨勭郴缁熸灦鏋勯€夋嫨浜咺P鏂瑰紡.涓嬮潰鏄垜鐨勪唬鐮侊細importorg.apache.commons.lang3.RandomUtils;importjava.net.InetAddress;importjava.time.LocalDateTime;importjava.time.ZoneId;importjava.time.format.DateTimeFormatter;importjava.util.ArrayList锛涘鍏ava.util.Collections锛涘鍏ava.util.List锛涘鍏ava.util.concurrent.atomic.AtomicInteger锛涘鍏ava.util.stream.Collectors锛涘鍏ava.util.stream.IntStream锛涘叕鍏辩被OrderGen2Test{/**璁㈠崟鍙风敓鎴?*/privatestaticZoneIdZONE_ID=ZoneId.of("Asia/Shanghai");privatestaticfinalAtomicIntegerSEQ=newAtomicInteger(1000);privatestaticfinalDateTimeFormatterDF_FMT_PREFIX=DateTimeFormatter.ofPattern("yyMMddHHmmssSS");publicstaticStringgenerateOrderNo(){LocalDateTimedataTime=LocalDateTime.now(ZONE_ID);if(SEQ.intValue()>9990){SEQ.getAndSet(1000);}杩斿洖dataTime.format(DF_FMT_PREFIX)+getLocalIpSuffix()+SEQ.getAndIncrement();}绉佹湁鏄撳け鎬ч潤鎬丼tringIP_SUFFIX=null;privatestaticStringgetLocalIpSuffix(){if(null!=IP_SUFFIX){returnIP_SUFFIX;}try{synchronized(OrderGen2Test.class){if(null!=IP_SUFFIX){returnIP_SUFFIX;}InetAddress鍦板潃=InetAddress.getLocalHost();//172.17.0.4172.17.0.199,StringhostAddress=addr.getHostAddress();if(null!=hostAddress&&hostAddress.length()>4){StringipSuffix=hostAddress.trim().split("\\.")[3];濡傛灉(ipSuffix.length()==2){IP_SUFFIX=ipSuffix;杩斿洖IP_SUFFIX锛泒ipSuffix="0"+ipSuffix;IP_SUFFIX=ipSuffix.substring(ipSuffix.length()-2);杩斿洖IP_SUFFIX锛泒IP_SUFFix=randomutils.nextint(10,20)+""";returnip_suffix;}}catch(ExceptionE){system.out.println("鑾峰彇ip澶辫触锛?+e.getMessage);(10,20)+"";returnIP_SUFFIX;}}}publicstaticvoidmain(String[]args){ListorderNos=Collections.synchronizedList(newArrayList,amStrange());8000).parallel().forEach(i->{orderNos.add(generateOrderNo());});ListfilterOrderNos=orderNos.stream().distinct().collect(Collectors.toList());System.out.println("Ordersample:"+orderNos.get(22));System.out.println("鐢熸垚鐨勮鍗曟暟閲忥細"+orderNos.size());System.out.println("杩囨护閲嶅鐨凱ostordernumber:"+filterOrderNos.size());System.out.println("閲嶅璁㈠崟鍙凤細"+(orderNos.size()-filterOrderNos.size()));}}/**璁㈠崟鏍锋湰锛?0082115575546011022鐢熸垚璁㈠崟鏁帮細8000杩囨护閲嶅鍚庣殑璁㈠崟鏁帮細8000閲嶅璁㈠崟鏁帮細0**/鏈€鍚庢槸浠g爜璇存槑鍜屼竴浜涘缓璁甮enerateOrderNo()鏂规硶涓笉闇€瑕佸姞閿侊紝鍥犱负AtomicInteger浣跨敤浜咰AS鑷棆閿侊紙淇濊瘉鍙鎬у拰鍘熷瓙鎬э紝鍏蜂綋璇疯嚜琛屼簡瑙o級銆俫etLocalIpSuffix()鏂规硶涓嶉渶瑕佷负绌恒€傚姞鍚屾閿侊紙鍙屽悜楠岃瘉閿侊紝鏁翠綋涓婃槸涓€绉嶅畨鍏ㄧ殑鍗曚緥妯″紡锛夊苟涓嶆槸瑙e喅闂鐨勫敮涓€鏂规硶銆傞棶棰樼殑鍏蜂綋瑙e喅鏂规鍙栧喅浜庡綋鍓嶇殑绯荤粺鏋舵瀯銆備换浣曟祴璇曢兘鏄繀瑕佺殑銆傛垜鍚屼簨鍓嶅嚑娆″皾璇曡В鍐宠繖涓棶棰樺悗閮芥病鏈夎嚜娴嬶紝涓嶆祴璇曚細鎹熷寮€鍙戠殑涓撲笟鎬э紒濂戒簡锛屾湰鏂囧氨鍒拌繖閲屼簡锛屽鏋滃ぇ瀹舵湁鏇村ソ鐨勫缓璁杩庣暀瑷€鍒嗕韩