在大流量下,直播app原始碼中訂單號的生成方式
流量不大的情況下,訂單號生成
在直播app原始碼開發時,我們可以利用DB生成唯一ID的方式來實現訂單號的生成。只不過拿到ID後,根據直播app原始碼的訂單業務,簡單加個字首而已。
@Service public class KeyGen{ @Autowired private KeyGenRepository keyGenRepository; public long genNo(){ KeyGen keyGen = new KeyGen(); keyGenRepository.genarateNo(keyGen ); //這個就是我們需要的no long no = keyGen.getNo(); } }
private String generateOrderNo() { StringBuffer sbf=new StringBuffer(); //字首 sbf.append("100"); long no = keyGen.genNo(); sbf.append(no); return sbf.toString(); }
這種方式在直播app原始碼開發中用了一段時間,沒發現有訂單號重複的情況。這種解決方案算是一個基礎的思路,再複雜的訂單生成規則,如果訂單號要包含一個唯一的屬性,利用資料庫的自增特性是個不錯的方案。
大流量下訂單號的生成
如果直播app原始碼每個小時的訂單量非常大,比如說,一個小時有兩百萬個訂單,只用單獨一個key_gen表是支援不住的,畢竟寫入的壓力太大了,影響訂單號的生成速度。這個時候可以考慮針對訂單號的生成,搞單獨的庫,並分庫,降低insert的壓力,提高生成訂單號的速度。
分庫的規則
有一種做法是根據倉庫來對映,比如說,一家電商公司的倉庫總共有50個,那麼可以進行如下的對映:
warehouse1:資料庫0 warehouse2:資料庫0 warehouse3:資料庫1 warehouse4:資料庫1 warehouse5:資料庫2 warehouse6:資料庫2 warehouse7:資料庫3 warehouse8:資料庫3 warehouse9:資料庫3 warehouse10:資料庫4 。。。。。。 。。。。。。 warehouse50:資料庫9
將50個倉庫對映到【0-9】對應的直播app原始碼資料庫上,當下單的時候,如果訂單對應的倉庫的是warehouse1,則對映到資料庫0,對應的倉庫如果是warehouse10,則對應的資料庫4。這樣子,訂單號的生成的壓力便分配到10個資料庫上了。
進行分庫後,每個分庫裡都有一張key_gen表。
組裝訂單號
上面的分庫分表,目的是為了生成一個唯一的ID,這個ID是訂單號的一部分,生成ID藉助了資料庫,但是後面組裝訂單號則完全是業務邏輯操作,無需利用資料庫了。
直播app原始碼中訂單號的生成規則各個公司都有自己的要求,舉個例子:
時間 + 6位隨機數 + 資料庫生成的唯一ID+倉庫標識
時間的生成可以簡單的使用如下程式碼生成:
SimpleDateFormat formatShort = new SimpleDateFormat("yyMMdd"); Date now = new Date(); String currentDate = formatShort.format(now);
六位的隨機數可以藉助JAVA的AtomicLong來實現,可以應付併發。
到此訂單號完整的生成了。那有沒有坑呢?因為直播app原始碼進行了分庫,每個庫都有key_gen,生成的ID只是庫內的唯一,多個庫則是未必的。比如說,兩個訂單建立的請求,倉庫分別是warehouse1和warehouse3,根據上面的配置規則,分別路由到了資料庫0和資料庫1這兩個庫,這個時候,就可能產生相同的ID。但是不要忘記,訂單號的生成是包含倉庫標識的,一個1,一個是3,是不同的,另外還有隨機數,所以訂單號重複的機會基本不太可能的。
提供批量生成訂單號的介面
尤其是將直播app原始碼生成訂單號定義為一個微服務介面的,一定要提供批量生成訂單號的介面,在流量很大的情況下,每獲取一個訂單號就要走一次網路呼叫,開銷實在太大了。那麼一次要生成多少個才合適呢,這個根據自己的業務情況,一般情況下20-50個是夠用的。
本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
原文連結:https://blog.csdn.net/linsongbin1/article/details/79467229
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2849760/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播app原始碼,js圖片下載方式集合APP原始碼JS
- app直播商城原始碼,有哪些常用的加密方式APP原始碼加密
- 18 位無重複訂單號生成程式碼
- 直播app系統原始碼,在 Flutter 中更改文字的字型系列APP原始碼Flutter
- app直播系統原始碼,點選生成條形碼APP原始碼
- app直播原始碼,uniapp隨機數生成簽名APP原始碼隨機
- Java自動生成訂單序列號Java
- 直播商城原始碼,PopupWindow選單在ListView中顯示原始碼View
- 教你實現,搭建直播影片app原始碼的賬號體系APP原始碼
- 影片直播app原始碼,vue實現列表自動滾動的方式APP原始碼Vue
- 影片直播app原始碼,Android TextView省略號代替多出資料APP原始碼AndroidTextView
- app直播原始碼,android中幾種常用的彈框APP原始碼Android
- 電商app原始碼該如何佈局流量模組(下)APP原始碼
- 直播app系統原始碼,簡單易上手的進度條APP原始碼
- app直播原始碼,ButtonTextView的背景設定APP原始碼TextView
- 在相親原始碼的多人音視訊聊天中插入現場直播的實現方式原始碼
- 直播成今年移動APP大熱門,直播帶貨app原始碼的開發有何亮點APP原始碼
- app直播原始碼,android實現帶下劃線的密碼輸入框APP原始碼Android密碼
- 直播系統app原始碼,shiro簡單的密碼加鹽與密碼驗證APP原始碼密碼
- 直播app系統原始碼,flutter 驗證碼輸入框的簡單封裝APP原始碼Flutter封裝
- 直播app原始碼,Java的輸入輸出APP原始碼Java
- 直播app原始碼中的資料是如何在網路中傳輸的?APP原始碼
- 直播app原始碼,Flutter 彈窗元件APP原始碼Flutter元件
- app直播原始碼“助力”直播架構,走上探索之路APP原始碼架構
- 直播APP原始碼,直播系統推流SDK(Android)APP原始碼Android
- app直播原始碼,edusoho直播回放增加進度條APP原始碼
- 直播app開發,實現簡單的釋出訂閱者模式APP模式
- 影片直播系統原始碼,vue中captcha.js生成驗證碼原始碼VueAPTJS
- 影片直播系統原始碼,java中Map遍歷的三種方式原始碼Java
- 直播帶貨app原始碼,獲取直播影片的第一幀APP原始碼
- 一對一交友原始碼+直播原始碼+短視訊原始碼,誰才是流量之王?原始碼
- app直播原始碼如何實現直播間紅包功能APP原始碼
- app直播原始碼,java自定義註解APP原始碼Java
- 教育直播APP原始碼開發系統APP原始碼
- app直播原始碼,css給數字或文字在滑鼠懸停時新增下劃線動畫APP原始碼CSS動畫
- 直播網站原始碼,vant中Dialog的使用,如何修改Message字號大小網站原始碼
- 直播APP原始碼實現直播流程上需要注意的內容APP原始碼
- EOS原始碼解析 建立賬號的三種方式。原始碼