日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java高并发秒杀Api-业务分析与DAO层构建1

發(fā)布時(shí)間:2023/12/31 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java高并发秒杀Api-业务分析与DAO层构建1 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

章節(jié)目錄

  • 1.為什么使用Spring+Spring MVC+Mybatis
  • 2.秒殺業(yè)務(wù)特性
  • 3.秒殺分析過(guò)程、優(yōu)化思路
  • 4.相關(guān)技術(shù)介紹
  • 5.基于Maven創(chuàng)建項(xiàng)目
  • 6.秒殺業(yè)務(wù)分析
  • 7.秒殺事務(wù)的難點(diǎn)分析
  • 8.實(shí)現(xiàn)秒殺的哪些功能

1.為什么使用Spring+Spring MVC+Mybatis

  • 框架易于使用、輕量級(jí)
  • 對(duì)業(yè)務(wù)代碼侵入性低
  • 成熟的社區(qū)與資料

2.秒殺業(yè)務(wù)特性

  • 秒殺業(yè)務(wù)場(chǎng)景具有典型的"事務(wù)"特性
  • 秒殺、紅包類需求越來(lái)越常見,對(duì)競(jìng)爭(zhēng)資源的訪問(wèn)
  • 面試常問(wèn)的問(wèn)題

3.相關(guān)技術(shù)介紹

  • MySQL
    • 表設(shè)計(jì)
    • SQL技巧
    • 事務(wù)、行級(jí)鎖
  • MyBatis
    • DAO層設(shè)計(jì)與開發(fā)
    • MyBatis 合理使用
    • MyBatis 與 Spring整合
  • Spring
    • Spring Ioc 整合Service
    • Spring 聲明式事務(wù)使用
  • Spring MVC
    • Restful 接口設(shè)計(jì)與使用
    • 框架運(yùn)作流程
    • Controller 設(shè)計(jì)技巧
  • 前端
    • 交互設(shè)計(jì)
    • BootStrap
    • Jquery
  • 高并發(fā)
    • 高并發(fā)點(diǎn)和高并發(fā)分析
    • 優(yōu)化思路并實(shí)現(xiàn)

4.基于Maven創(chuàng)建項(xiàng)目

1.maven命令創(chuàng)建web項(xiàng)目骨架

mvn archetype:generate -DgroupId=org.seckill -DartifactId=seckill - DarchetypeArtifactId=maven-archetype-webapp

5.秒殺業(yè)務(wù)分析

如下圖所示:


秒殺業(yè)務(wù)系統(tǒng)流程分析

所以秒殺業(yè)務(wù)的核心是對(duì)庫(kù)存的處理。

用戶針對(duì)庫(kù)存處理的業(yè)務(wù)分析
用戶的秒殺過(guò)程

需要減庫(kù)存->記錄購(gòu)買明細(xì)->組成完整事務(wù)->數(shù)據(jù)持久化
如下圖所示:

用戶秒殺過(guò)程

用戶購(gòu)買行為

記錄誰(shuí)購(gòu)買成功了->成功的時(shí)間及有效期->付款、發(fā)貨信息

為什么需要事務(wù)

事務(wù)不完整導(dǎo)致的數(shù)據(jù)一致性問(wèn)題

如上圖所示 1.減了庫(kù)存,但是沒(méi)有用戶的購(gòu)買明細(xì),那么就會(huì)出現(xiàn)50個(gè)商品,但是購(gòu)買明 細(xì)小于50個(gè),到時(shí)候發(fā)貨會(huì)發(fā)現(xiàn)有些許商品滯留在倉(cāng)庫(kù)中,此種情況屬于少賣 的情況。 2.記錄了明細(xì)但是沒(méi)有減庫(kù)存,就會(huì)發(fā)現(xiàn)訂單量比商品量要多,出現(xiàn)超賣的情 況,還有一種情況也會(huì)導(dǎo)致超賣,多個(gè)用戶并發(fā)修改庫(kù)存,加入庫(kù)存量為1,這 個(gè)時(shí)候多個(gè)用戶同時(shí)去減庫(kù)存(經(jīng)過(guò)庫(kù)存量>0的驗(yàn)證),會(huì)導(dǎo)致庫(kù)存為負(fù)數(shù), 多個(gè)用戶搶到同一個(gè)商品,這種情況下也會(huì)導(dǎo)致超賣發(fā)生。

數(shù)據(jù)落地方案
MySQL VS NoSQL
NoSQL非關(guān)系型數(shù)據(jù)庫(kù)在事務(wù)的支持上并沒(méi)有關(guān)系型數(shù)據(jù)庫(kù)可靠。
所以歸根結(jié)底事務(wù)機(jī)制依然是目前最可靠的落地方案。

6.秒殺事務(wù)難點(diǎn)分析

6.1 難點(diǎn)問(wèn)題-競(jìng)爭(zhēng)

競(jìng)爭(zhēng)問(wèn)題-并發(fā)沖突修改
解決方案是采用數(shù)據(jù)庫(kù)innodb引擎提供的事務(wù)行級(jí)鎖

  • 用戶減庫(kù)存的事務(wù)流程: begin; update 庫(kù)存數(shù)量; insert 購(gòu)買明細(xì); commit;
  • 行級(jí)鎖
    如下如所示:
    行級(jí)鎖
    情景分析:
在事務(wù)執(zhí)行過(guò)程中,mysql默認(rèn)的repeateable read 隔離級(jí)別會(huì)在寫操作發(fā)生的 行上加上行級(jí)鎖(非記錄加鎖,而是在對(duì)應(yīng)索引上加鎖,上圖中的update加鎖 發(fā)生在id上),多個(gè)寫請(qǐng)求并發(fā)更新同一行記錄會(huì)產(chǎn)生如下問(wèn)題: 因?yàn)樾屑?jí)鎖在事務(wù)結(jié)束之后才能釋放鎖,可能會(huì)導(dǎo)致鎖等待的發(fā)生。數(shù)據(jù)庫(kù)吞吐率(事務(wù)處理能力)會(huì)降低。

所以秒殺的難點(diǎn)是什么?
秒殺的難點(diǎn)是如何高效的處理競(jìng)爭(zhēng)-如何在保證數(shù)據(jù)一致性的情況下高效的處理競(jìng)爭(zhēng)

8.實(shí)現(xiàn)秒殺的哪些功能

  • 1.秒殺接口暴露
    瀏覽器插件獲取秒殺接口,通過(guò)腳本去秒殺,保護(hù)秒殺接口的一種手段。
  • 2.執(zhí)行秒殺的操作
    執(zhí)行秒殺的業(yè)務(wù)邏輯
  • 3.秒殺查詢,商品詳情頁(yè)查詢。

其實(shí)市面上最主要的幾個(gè)秒殺思路是:

1.直接在數(shù)據(jù)庫(kù)層面做秒殺
2.緩存中存儲(chǔ)庫(kù)存,用戶秒殺請(qǐng)求是將緩存中庫(kù)存與數(shù)據(jù)庫(kù)中庫(kù)存數(shù)據(jù)同時(shí)進(jìn)行減庫(kù)存的過(guò)程,保證數(shù)據(jù)一致性是一個(gè)難點(diǎn)。
3.緩存中存儲(chǔ)有效的減庫(kù)存操作,隊(duì)列減庫(kù)存的的請(qǐng)求依次順序執(zhí)行數(shù)據(jù)庫(kù)減庫(kù)存、生成訂單明細(xì)事務(wù)(操作),如小米。

總結(jié)

以上是生活随笔為你收集整理的Java高并发秒杀Api-业务分析与DAO层构建1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。