最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)高并發(fā)秒殺的幾種方式

 更新時間:2023年05月23日 15:51:50   作者:fking86  
高并發(fā)場景在現(xiàn)場的日常工作中很常見,本文主要介紹了Java實現(xiàn)高并發(fā)秒殺的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

引言

高并發(fā)場景在現(xiàn)場的日常工作中很常見,特別是在互聯(lián)網(wǎng)公司中,這篇文章就來介紹如何實現(xiàn)高并發(fā)秒殺的幾種方式。

實現(xiàn)方式

1.緩存

使用緩存可以減少數(shù)據(jù)庫的訪問量,提高系統(tǒng)吞吐量??梢跃彺鏌狳c數(shù)據(jù)、查詢結(jié)果等。

@Cacheable(value = "goods", key = "#goodsId")
public Goods getGoods(Integer goodsId) {
    // 查詢數(shù)據(jù)庫
}

2.前端實現(xiàn)方式

通過前端 JS 代碼限制用戶請求頻率,避免過大流量涌入,導(dǎo)致系統(tǒng)崩潰。比如可以實現(xiàn)每秒鐘限制請求次數(shù)等。

var requestTimes = 0; 
var lastRequestTime = 0;
function requestSecKill() {
    var now = new Date();
    if (now - lastRequestTime < 1000 && requestTimes > 5) {
        alert('請求過于頻繁,請稍后再試!');
        return;
    }
    lastRequestTime = now;
    requestTimes++;
    // 發(fā)送秒殺請求
}

3.隊列削峰

當(dāng)請求流量超過系統(tǒng)容量時,暫存多余請求到消息隊列,然后逐漸削峰處理。比如定時從隊列中取出一定數(shù)量請求處理。

BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(1000);
?
public void addTask(Runnable task) {
    boolean offered = queue.offer(task);
    if (!offered) {
        // 隊列滿了,請求太多,返回限流提示
    }
}
?
public void handleTasks() {
    Runnable task = queue.poll();
    if (task != null) {
        executor.execute(task);
    }
}

4.限流

使用令牌桶或者漏桶算法根據(jù)系統(tǒng)容量限制請求通過速率。超過速率的請求被拒絕或進(jìn)入隊列等待。

RateLimiter rateLimiter = RateLimiter.create(10); // 每秒不超過10個請求 
if (rateLimiter.tryAcquire()) {
    // 請求通過
} else {
   // 請求超過限流頻率
}

5.數(shù)據(jù)庫讀寫分離

將數(shù)據(jù)庫分成主庫和從庫,秒殺相關(guān)讀操作從從庫讀取,防止主庫壓力過大。

@Autowired
private GoodsRepository goodsRepository;
?
public Goods getGoods(Integer goodsId) {
    // 讀取從庫
    return goodsRepository.read(goodsId); 
}
?
public void reduceStock(Integer goodsId) {
    // 寫入主庫
    goodsRepository.write(goodsId);
}

6.緩存失效時間

可以根據(jù)系統(tǒng)負(fù)載動態(tài)調(diào)整緩存失效時間,在高流量期間縮短失效時間,避免緩存相同數(shù)據(jù)長時間。

@Cacheable(value = "goods", key = "#goodsId", expire = "#expireTime")
public Goods getGoods(Integer goodsId, Integer expireTime) {
    // 查詢數(shù)據(jù)庫
}
?
// 調(diào)整失效時間
cacheManager.setCacheExpired(cacheName, expireTime); 

7.版本控制

對緩存或商品數(shù)據(jù)設(shè)置版本號,當(dāng)數(shù)據(jù)修改時版本號遞增。請求帶上版本號,如果緩存版本低,則從數(shù)據(jù)庫重新加載數(shù)據(jù)??梢源_保用戶獲取最新數(shù)據(jù)。

后端:

@Cacheable(value = "goods", key = "#goodsId + #version") 
public Goods getGoods(Integer goodsId, Integer version) {
    // 查詢數(shù)據(jù)庫,帶版本號校驗
}
?
public void updateGoods(Integer goodsId, Integer version) {
    goods.setVersion(version + 1);
    // 更新數(shù)據(jù)庫  
}

前端:

$.get("/goods/" + goodsId + "?v=" + version, function(data) {
     // 處理返回結(jié)果
});

總結(jié)

如果要完美解決高并發(fā)場景,需要 從緩存、限流、消息隊列、數(shù)據(jù)庫擴(kuò)展多方面考慮,而不僅僅是一兩個技術(shù)就可以。還需要注意系統(tǒng)的穩(wěn)定性、擴(kuò)展性,要足夠靈活與健壯。

到此這篇關(guān)于Java實現(xiàn)高并發(fā)秒殺的幾種方式的文章就介紹到這了,更多相關(guān)Java 高并發(fā)秒殺內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot整合Swagger2的示例代碼

    spring boot整合Swagger2的示例代碼

    Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化RESTful風(fēng)格的 Web 服務(wù)。這篇文章主要介紹了spring boot整合Swagger2,需要的朋友可以參考下
    2017-04-04
  • Java 中的 BufferedWriter 介紹_動力節(jié)點Java學(xué)院整理

    Java 中的 BufferedWriter 介紹_動力節(jié)點Java學(xué)院整理

    BufferedWriter 是緩沖字符輸出流。它繼承于Writer。接下來通過本文給大家分享Java 中的 BufferedWriter知識,需要的朋友參考下吧
    2017-05-05
  • SpringMVC整合SSM實現(xiàn)異常處理器詳解

    SpringMVC整合SSM實現(xiàn)異常處理器詳解

    SpringMVC是一種基于Java,實現(xiàn)了Web MVC設(shè)計模式,請求驅(qū)動類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦。基于請求驅(qū)動指的就是使用請求-響應(yīng)模型,框架的目的就是幫助我們簡化開發(fā),SpringMVC也是要簡化我們?nèi)粘eb開發(fā)
    2022-10-10
  • Spring?Cloud?整合?nacos實現(xiàn)動態(tài)配置中心的詳細(xì)步驟

    Spring?Cloud?整合?nacos實現(xiàn)動態(tài)配置中心的詳細(xì)步驟

    這篇文章主要介紹了Spring?Cloud?整合?nacos?實現(xiàn)動態(tài)配置中心,整合步驟是通過添加依賴新建nacos配置,本文分步驟通過實例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • Spring boot2X負(fù)載均衡和反向代理實現(xiàn)過程解析

    Spring boot2X負(fù)載均衡和反向代理實現(xiàn)過程解析

    這篇文章主要介紹了Spring boot2X負(fù)載均衡和反向代理實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Spring中@ExceptionHandler注解的使用方式

    Spring中@ExceptionHandler注解的使用方式

    這篇文章主要介紹了Spring中@ExceptionHandler注解的使用方式,@ExceptionHandler注解我們一般是用來自定義異常的,可以認(rèn)為它是一個異常攔截器(處理器),需要的朋友可以參考下
    2024-01-01
  • Jenkins發(fā)送測試報告郵件過程詳解

    Jenkins發(fā)送測試報告郵件過程詳解

    這篇文章主要介紹了Jenkins發(fā)送測試報告郵件過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 深入理解Java String.replace()原理

    深入理解Java String.replace()原理

    String.replace()是我們?nèi)粘i_發(fā)中經(jīng)常用到的一個方法,那么,你有看過其底層的源碼實現(xiàn)嗎,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Java如何使用命令查看內(nèi)存占用情況

    Java如何使用命令查看內(nèi)存占用情況

    jhat是一個用于分析Java堆轉(zhuǎn)儲文件的工具,通過啟動Web服務(wù)器并加載堆轉(zhuǎn)儲文件,可以在瀏覽器中查看占用最多內(nèi)存的類及其詳細(xì)信息
    2025-02-02
  • mybatis實現(xiàn)增刪改查_動力節(jié)點Java學(xué)院整理

    mybatis實現(xiàn)增刪改查_動力節(jié)點Java學(xué)院整理

    本文通過實例代碼給大家介紹了mybatis實現(xiàn)增刪改查功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09

最新評論

金山区| 牙克石市| 尉氏县| 溧水县| 赤壁市| 宁南县| 股票| 桃源县| 洛川县| 关岭| 博野县| 西乌| 平武县| 德保县| 汤阴县| 明水县| 体育| 石景山区| 昭通市| 齐河县| 佛教| 宁陵县| 海原县| 芦溪县| 文山县| 安溪县| 霍林郭勒市| 会同县| 新源县| 赣榆县| 儋州市| 文安县| 乳山市| 乌鲁木齐县| 岢岚县| 福建省| 临夏县| 满城县| 湖口县| 永州市| 兰考县|