高併發下怎樣生成唯一的訂單號?

2021-08-19 01:19:03 字數 457 閱讀 1157

如果沒有併發,訂單號只在乙個執行緒內產生,那麼由於程式是順序執行的,不同訂單的生成時間一定不同,因此用時間就可以區分各個訂單。

如果存在併發,且訂單號是由乙個程序中的多個執行緒產生的,那麼只要把執行緒id新增到序列號中就可以保證訂單號唯一。

如果存在併發,且訂單號是由同一臺主機中的多個程序產生的,那麼只要把程序id新增到序列號中就可以保證訂單號唯一。

如果存在併發,且訂單號是由不同臺主機產生的,

那麼mac位址、ip位址或cpu序列號等能夠區分主機的號碼新增到序列號中就可以保證訂單號唯一。

1. 機器碼(3位, 分布式節點),年月日分時秒(12位),遞增的序列(4位),當併發遞增序列超過4位時,秒數+1,序列從0開始計時,這樣每秒支援9999個訂單號生成,隔天序列清為0.

2.後台統一生成的訂單號後,推入redis,一次性推個幾十w個,檢查剩餘多少後,再推,也可以保證高併發的場景。

生成訂單號方法

高並發生成唯一訂單號

最近開發一套會員系統,涉及到訂單號生成,在高並發條前提下,如何生成唯一的訂單號值得斟酌,我這裡提供一種較為可行的方案 public static string getorderidbyuuid 0 代表前面補充0 4 代表長度為4 d 代表引數為正數型 return time string.form...

SQL server高並發生成唯一訂單號的方法實現

前幾天寫了一篇mysql高並發生成唯一訂單號的方法,有人私信問有沒有sql server版本的,今天中午特地寫了sql server版本的高並發生成唯一訂單號實現,其實mysql和sql server原理都一樣,主要是他們部分語法有些區別,所以你會發現我這篇文章文字說明幾乎一樣,只有 和介面不一樣。...

PHP生成唯一訂單號

order number date ymd substr implode null,array map ord str split substr uniqid 7,13 1 0,8 簡單從內到外解析一下這個訂單號生成過程 1 date ymd 這個很容易理解,是在最前方拼接乙個當前年月日組成的數字。...