商品訂單ID簡易演算法

2022-08-10 22:06:19 字數 719 閱讀 4329

演算法目標:支援中小型支付系統,單機房生成訂單號qps<=1w,保證訂單號絕對唯一,機房內趨勢遞增;

序列號生成演算法(字串訂單號):

舉例:機房a:

"" =》"01201710281951476558510001" 

"" =》"01201710281951476558510002"

機房b:

"" =》"02201710281951470101180001"

分析:機房序列號:機房唯一標識,自分配

年月日時分秒:如題

毫秒:如題

微秒:如題

自增序列號count:這裡使用redis集群(同機房機器須使用相同的集群)生成,根據""作為key,使用incr命令生成,當incr返回1時,給key設定過期時間expire,防止同一微秒生成相同的訂單號

偽**如下:

cout = incr 0120171028195147655851

if count == 1:

expire 0120171028195147655851 60

最終訂單號 = "01201710281951476558510001" 

看到另乙個不錯的實現演算法

function build_order_no()

這套演算法可以支撐非大型電商平台的訂單系統,如果要追求更高的qps,可以參考snowflake演算法;

————————————————

訂單Id生成之雪花演算法

不跟你多bb,上張圖好說話 為什麼 是64位呢,因為返回值是long型別是64位,但是第一位是符號位不可用,所有只剩下63位 時間戳的長度,決定了該演算法使用的年限,時間戳記錄的不是當前時間戳,而是當前時間戳和和起始時間戳的差值,起始時間戳由程式設計師自己設定 41位 按如下公式計算可用時間約為 1...

SQL 模擬生成商品訂單表

想練習 sql 卻苦於無資料?不存在的!所有的資料都可以人工生成!比方說你需要練習操作使用者交易表,包含 userid 使用者id orderid 訂單id amount 訂單金額 paytime 支付時間 這幾個字段,如下所示 現在資料庫中有一張使用者交易表order,其中有userid 使用者i...

資料庫 訂單商品表(單錶 商品銷量表)

訂單商品表 order detail 自動編號 訂單編號 商品編號 商品名稱 product name,商品可能刪除,所以這裡要記錄,不能直接讀商品表 商品 product price,商品可能刪除,所以這裡要記錄 商品型號 product marque,前台展示給客戶 商品條碼 product s...