-
該節視頻涉及到sql優化
查看全部 -
使用存儲過程,對 mysql事務行級鎖的效率進行優化,一次編譯,多次使用,減少編譯時間<br/>查看全部
-
執行存儲過程
查看全部 -
20、21、22: insert_count 小于0 ,這只能是出錯,故以 R_RESULT = -2 代表出錯,作為返回值返回;
23~25:以上已排除 insert_count 及插入返回結果 小于、等于0的,剩下的只能是大于零,由于每次只有一條數據進來,故只能返回 1 ;執行update 減庫存操作,對number-1
26~ 29 :并根據活動或秒殺商品的id對活動的開始、結束時間與活動時間周期校驗是否處在同一區域內,并驗證活動商品量是否仍 大于零
30:使用 select row-count() into insert_count 來獲取減庫存操作的有效返回值
31~40 : 根據 減庫存的返回值判斷是否執行減庫存成功,若 insert_count <=0;則說明失敗或出錯,并返回 0 或 -2 ;余下的結果只能是成功,設置返回值為 1 ;
查看全部 -
2:用到 mysql 的 DELIMITER ,使用 $$ 作為換行符,類似于;
7: 定義存儲過程的名字: 創建存儲過程 名字.名字
8、9: 存儲過程中輸入、輸出的參數
10: BEGIN ?表示 開始編寫存儲過程的具體內容
11:判斷一個變量,該變量名為 insert_count ,后面是具體類型及默認值
12:開啟事務? transaction
13:插入購買記錄 到 用戶記錄表
14、15:表示具體要插入哪些數據到哪些表參數上
16:查詢 上一次 insert_count 返回的有效值
17、18、19 : 當上一次執行的有效值 = 0,說明插入操作失敗,回滾,并 設置 ????R_RESULT 代表重復秒殺
查看全部 -
業務邏輯層面的優化,將用戶的每次購買記錄到 insert? 到數據庫的操作提前到減庫存之前;
并獲得返回值 insertCount ,其代表當前用戶執行了一次秒殺操作;
當用戶在前端頁面重復點擊多次購買時,該 insertCount> 0時則說明當前用戶已購買,不再進入到下一步的減庫存操作;
從而避免了行級鎖頻繁無功用訪問執行時帶來的效率問題;
最后,如果insertCount <=0時,允許進入到減庫存的操作。
查看全部 -
優化:
前端: 動靜態數據做分離,減少請求與響應時間;按鈕防重復,防止用戶發送無效的重復請求,因為秒殺活動一般都會有購買數量的限制,敲的次數再多,最后還是要查看是否已購。影響了效率,可有前端代為處理并優化
后端:使用CDN換存重要的靜態資源等;在后端對活動結束時間、商品選購時間、業務的相關邏輯要求都放在后端代碼中,并調用緩存來進行暫存,已減少對DB的直接操作,提高效率
查看全部 -
第一個用戶執行一次商品購買時,對DB的update減庫存操作不是執行完就結束,后續還涉及到GC內存滿了,等待自動回收過程中的網絡響應的延遲問題;除此之外,用戶的每一次購買操作都是一個具體的事務,其中還涉及到了用戶個人的購買明細,可理解為淘寶的已購買這一項,而這又是一個insert 的操作,執行完后又或許可能再一次出現GC進行內存的清理而導致延遲,直到反應過來后,繼續執行后續的事務提交commit或者失敗后的回滾rollback
而這時另一個用戶的update 操作已經開始很久了超過了 4W分之一秒的理想時間,所以,實際秒殺項目中,需要對每一個用戶的update時間,即行級鎖的時間進行優化,因為,下一個用戶還在等待,他后面或許還有一個它也在等待....哈士奇瞪著眼等著呢
查看全部 -
壓力測試下,一條update 可以 達到 4W 的 QPS ,等同于一件商品能在一秒內被銷售掉 4W 件,這應該是理想值吧!
那么,對于實際執行中的低效是什么原因?這才是并發中要優化的重點吧!
查看全部 -
使用redis/NoSQL的數據驗真,將邏輯操作解析等校驗后調用MQ進行解耦,發送消息隊列,或調用MQ的異步操作提高效率異步處理事務;最后根據隊列執行結果對MySQL進行操作,這一步需要根據消費消息的結果來操作,即落地實現
查看全部 -
秒殺優化原因:
(1)無法使用CDN緩存,其只針對核心數據做緩存
(2)在后端庫存操作中,不能在緩存中減庫存,極短時間內不同用戶的緩存數據不同,變化大,容易造成超量
(3)某一個熱點商品被同一時間由多人競爭時會產生大量的update操作,DB效率及錯誤率需要優化
查看全部 -
一致性維護:
緩存半小時,半小時之后,這個redis的秒殺對象就會超時,超時之后 ,重新訪問mysql服務器獲取數據,或者是當我們的mysql更新時 我主動的更新一下redis緩存,這樣也非常方便? ? ? 暴露秒殺地址
查看全部 -
212331
查看全部 -
12312312
查看全部 -
3213123
查看全部
舉報