欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot+Redis隊(duì)列實(shí)現(xiàn)Java版秒殺的示例代碼

 更新時(shí)間:2023年06月09日 09:41:01   作者:可樂漢堡cola  
本文主要介紹了SpringBoot+Redis隊(duì)列實(shí)現(xiàn)Java版秒殺的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

項(xiàng)目場(chǎng)景:

需求是做一個(gè)秒殺系統(tǒng),比如大家來搶100臺(tái)手機(jī),先到先得。

解決方案:

這里用的是springboot的StringRedisTemplate

工具類:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.time.Duration;
import java.util.Collection;
@Service
public class RedisServiceImpl {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    //添加字符串并設(shè)置過期時(shí)間
    public void addString(String key, String value, Duration duration) {
        stringRedisTemplate.opsForValue().set(key, value, duration);
    }
    //查找字符串
    public String findString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
    //根據(jù)Key刪除
    public Boolean deleteByKey(String key) {
        return stringRedisTemplate.delete(key);
    }
    //在隊(duì)列尾部減少一個(gè)對(duì)象
    public String removeOneEntryOnListRight(String listName) {
        return stringRedisTemplate.opsForList().rightPop(listName);
    }
    //在隊(duì)列頭部新增對(duì)象
    public Long addEntriesOnListLeft(String listName, Collection<String> args) {
        return stringRedisTemplate.opsForList().leftPushAll(listName, args);
    }
}

主要使用的是最后兩個(gè)方法,最后一個(gè)方法,在隊(duì)列頭部新增對(duì)象,如果沒有這個(gè)隊(duì)列,他會(huì)創(chuàng)建出來這個(gè)隊(duì)列,然后將一個(gè)集合統(tǒng)統(tǒng)塞到這個(gè)redis隊(duì)列中。倒數(shù)第二個(gè)方法每調(diào)用一次,會(huì)刪除隊(duì)列中最后一個(gè)元素,然后返回這個(gè)元素的值,如果隊(duì)列中已經(jīng)沒有元素了(隊(duì)列已經(jīng)沒了)那么他會(huì)返回null,他們都是原子操作。

如此,每個(gè)請(qǐng)求都無需經(jīng)過加鎖操作,直接利用redis的單線程特性,即可實(shí)現(xiàn)高并發(fā)下的秒殺:請(qǐng)求到達(dá)redis,redis會(huì)逐個(gè)執(zhí)行,每一次執(zhí)行要么返回一個(gè)值,要么返回null。很顯然,返回值的就是搶到了,返回null的就是沒搶到。而且可以靈活的為這個(gè)隊(duì)列新加入一些元素(老板發(fā)話再加100臺(tái))或者直接把這個(gè)隊(duì)列刪了(老板說不行,不賣了)都不會(huì)對(duì)代碼產(chǎn)生任何影響。

其中對(duì)應(yīng)的redis操作指令分別是:

  • 在隊(duì)列左側(cè)新增:lpush
  • 在隊(duì)列右側(cè)消費(fèi):rpop

在任務(wù)開始時(shí)向redis中插入一個(gè)大隊(duì)列

List<String> entriesList = new LinkedList<>();
   for (int i = 0; i < 100; i++){
       entriesList.add("某個(gè)商品");
   }
   redisService.addEntriesOnListLeft("隊(duì)列名",entriesList);

突然想到這個(gè)實(shí)現(xiàn)即使秒殺100臺(tái)不同型號(hào)的手機(jī)(并且在秒到時(shí)就通知用戶秒到的是啥),也不用改代碼。

每次秒殺執(zhí)行:

String redisResult = redisService.removeOneEntryOnListRight("隊(duì)列名");
    if (null == redisResult) {
        //說明沒搶到
    }else{
 //說明搶到了 執(zhí)行搶到邏輯
}

到此這篇關(guān)于SpringBoot+Redis隊(duì)列實(shí)現(xiàn)Java版秒殺的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot Redis秒殺內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何把JAR發(fā)布到maven中央倉庫的幾種方法

    如何把JAR發(fā)布到maven中央倉庫的幾種方法

    這篇文章主要介紹了如何把JAR發(fā)布到maven中央倉庫的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • MyBatis中TypeHandler的使用教程詳解

    MyBatis中TypeHandler的使用教程詳解

    在我們平常開發(fā)操作數(shù)據(jù)庫時(shí),查詢、插入數(shù)據(jù)等操作行為,有時(shí)會(huì)報(bào)數(shù)據(jù)類型不匹配異常,就可以得知數(shù)據(jù)的類型是不唯一的必然是多種不同的數(shù)據(jù)類型,本文給大家介紹了MyBatis中TypeHandler的使用教程,需要的朋友可以參考下
    2024-12-12
  • java 中設(shè)計(jì)模式之單例

    java 中設(shè)計(jì)模式之單例

    這篇文章主要介紹了java 中設(shè)計(jì)模式之單例的相關(guān)資料,這里說明惡漢模式與懶漢模式,需要的朋友可以參考下
    2017-08-08
  • Java異常分類以及幾種處理機(jī)制分析講解

    Java異常分類以及幾種處理機(jī)制分析講解

    在Java的廣闊宇宙中,有一群特殊的“超級(jí)英雄”,它們?cè)诖a世界中穿梭,守護(hù)著程序的正常運(yùn)行——它們就是“異常”,這些英雄們,各司其職,保護(hù)著程序免受錯(cuò)誤的侵?jǐn)_,今天,我們將深入這個(gè)神秘的世界,全面解析異常的分類,掌握異常的處理機(jī)制
    2024-07-07
  • JSP、Servlet中g(shù)et請(qǐng)求和post請(qǐng)求的區(qū)別總結(jié)

    JSP、Servlet中g(shù)et請(qǐng)求和post請(qǐng)求的區(qū)別總結(jié)

    這篇文章主要介紹了JSP、Servlet中g(shù)et請(qǐng)求和post請(qǐng)求的區(qū)別總結(jié),列舉了多條不同點(diǎn),需要的朋友可以參考下
    2014-07-07
  • IntelliJ IDEA下SpringBoot如何指定某一個(gè)配置文件啟動(dòng)項(xiàng)目

    IntelliJ IDEA下SpringBoot如何指定某一個(gè)配置文件啟動(dòng)項(xiàng)目

    這篇文章主要介紹了IntelliJ IDEA下SpringBoot如何指定某一個(gè)配置文件啟動(dòng)項(xiàng)目問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringMVC源碼解讀之HandlerMapping

    SpringMVC源碼解讀之HandlerMapping

    這篇文章主要介紹了SpringMVC源碼解讀之HandlerMapping 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Java將Word轉(zhuǎn)換成PDF的常用用法

    Java將Word轉(zhuǎn)換成PDF的常用用法

    Java開發(fā)人員在處理文檔轉(zhuǎn)換時(shí),常常需要將Word或Excel文檔轉(zhuǎn)換為PDF格式,以便于更好地保持格式一致性、便于分發(fā)和打印,這篇文章主要給大家介紹了關(guān)于Java將Word轉(zhuǎn)換成PDF的常用用法,需要的朋友可以參考下
    2024-08-08
  • java實(shí)現(xiàn)附件預(yù)覽(openoffice+swftools+flexpaper)實(shí)例

    java實(shí)現(xiàn)附件預(yù)覽(openoffice+swftools+flexpaper)實(shí)例

    本篇文章主要介紹了java實(shí)現(xiàn)附件預(yù)覽(openoffice+swftools+flexpaper)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • IntelliJ IDEA設(shè)置代碼的快捷編輯模板Live Templates

    IntelliJ IDEA設(shè)置代碼的快捷編輯模板Live Templates

    今天小編就為大家分享一篇關(guān)于IntelliJ IDEA設(shè)置代碼的快捷編輯模板Live Templates,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10

最新評(píng)論