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

redis解決高并發(fā)看門狗策略的實(shí)現(xiàn)

 更新時間:2025年02月19日 08:27:36   作者:小湯猿人類  
本文主要介紹了redis解決高并發(fā)看門狗策略的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

當(dāng)一個業(yè)務(wù)執(zhí)行時間超過自己設(shè)定的鎖釋放時間,那么會導(dǎo)致有其他線程進(jìn)入,從而搶到同一個票,所有需要使用看門狗策略,其實(shí)就是開一個守護(hù)線程,讓守護(hù)線程去監(jiān)控key,如果到時間了還未結(jié)束,就會將這個key重新set一次,重置到原來的時間,只要主線程未結(jié)束,守護(hù)線程就會一直存在,這里還是會有一些問題,就是如果redis宕機(jī)了,導(dǎo)致第一個線程拿到了鎖,第二個線程也拿到了鎖,為了解決這個就需要引入紅鎖

1. 導(dǎo)入依賴,這里導(dǎo)入依賴可能會和原先的redis依賴沖突,所以只能留下一個,不然可能會出錯

去除spring-boot-starter-data-redis

  <!-- 集成Redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

添加redisson

            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson-spring-boot-starter</artifactId>
                <version>3.21.0</version>
            </dependency>

2. 修改配置文件,將之前的配置緩存redisson的

spring:
  data:
    redis: # redis配置
      url: redis://:127.0.0.1:6379

3. 開始分布式鎖-看門狗策略,找到高頻訪問的業(yè)務(wù)添加以下代碼

在業(yè)務(wù)方法開始的頭添加

在方法末尾添加釋放鎖,別忘了添加try-catch-finally塊

這是一段完整的分布式處理,有需要直接copy后修改即可

  public void doConfirm(ConfirmOrderDoReq req) {
        String lockKey = DateUtil.formatDate(req.getDate()) + "-" + req.getTrainCode();
        RLock lock = null;
        try {
            lock = redissonClient.getLock(lockKey);

            boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);

            if (tryLock) {
                LOG.info("搶到鎖,開始處理訂單");
            } else {
                LOG.info("很遺憾,沒有搶到鎖");
                //當(dāng)前搶票人數(shù)多,請稍后再試
                throw new BusinessException(BusinessExceptionEnum.CONFIRM_ORDER_LOCK_FAIL);
            }
            //業(yè)務(wù)處理。。。。

        } catch (InterruptedException e) {
            LOG.error("搶票失敗", e);
            throw new BusinessException(BusinessExceptionEnum.CONFIRM_ORDER_LOCK_FAIL);
        } finally {
            LOG.info("鎖被釋放了");
            // 釋放鎖
            if (lock != null && lock.isHeldByCurrentThread()){
                lock.unlock();
            }
        }
    }

到此這篇關(guān)于redis解決高并發(fā)看門狗策略的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)redis 高并發(fā)看門狗策略內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談redis采用不同內(nèi)存分配器tcmalloc和jemalloc

    淺談redis采用不同內(nèi)存分配器tcmalloc和jemalloc

    下面小編就為大家?guī)硪黄獪\談redis采用不同內(nèi)存分配器tcmalloc和jemalloc。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Redis實(shí)現(xiàn)多人多聊天室功能

    Redis實(shí)現(xiàn)多人多聊天室功能

    這篇文章主要為大家詳細(xì)介紹了Redis實(shí)現(xiàn)多人多聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Redis精確去重計(jì)數(shù)方法(咆哮位圖)

    Redis精確去重計(jì)數(shù)方法(咆哮位圖)

    這篇文章主要給大家介紹了關(guān)于Redis精確去重計(jì)數(shù)方法(咆哮位圖)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解基于redis實(shí)現(xiàn)的四種常見的限流策略

    詳解基于redis實(shí)現(xiàn)的四種常見的限流策略

    限流算法在分布式領(lǐng)域是一個經(jīng)常被提起的話題,當(dāng)系統(tǒng)的處理能力有限時, 如何阻止計(jì)劃外的請求繼續(xù)對系統(tǒng)施壓,這是一個需要重視的問題。除了控制流量,限流還有一個應(yīng)用目的是控制用戶行為,避免垃圾請求
    2021-06-06
  • Redis實(shí)現(xiàn)IP限流的2種方式舉例詳解

    Redis實(shí)現(xiàn)IP限流的2種方式舉例詳解

    通俗的說限流就是限制一段時間內(nèi)用戶訪問資源的次數(shù),減輕服務(wù)器壓力,這篇文章主要給大家介紹了關(guān)于Redis實(shí)現(xiàn)IP限流的2種方式,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Spring?Boot?整合Redis?實(shí)現(xiàn)優(yōu)惠卷秒殺?一人一單功能

    Spring?Boot?整合Redis?實(shí)現(xiàn)優(yōu)惠卷秒殺?一人一單功能

    這篇文章主要介紹了Spring?Boot?整合Redis?實(shí)現(xiàn)優(yōu)惠卷秒殺?一人一單,在分布式系統(tǒng)下,高并發(fā)的場景下,會出現(xiàn)此類庫存超賣問題,本篇文章介紹了采用樂觀鎖來解決,需要的朋友可以參考下
    2022-09-09
  • Redis設(shè)置key的過期時間

    Redis設(shè)置key的過期時間

    本文主要介紹了Redis設(shè)置key的過期時間,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Redis擊穿穿透雪崩產(chǎn)生原因分析及解決思路面試

    Redis擊穿穿透雪崩產(chǎn)生原因分析及解決思路面試

    這篇文章主要為大家介紹了Redis擊穿穿透雪崩產(chǎn)生原因及解決思路的面試問題答案參考,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-03-03
  • 基于redis實(shí)現(xiàn)token驗(yàn)證用戶是否登陸

    基于redis實(shí)現(xiàn)token驗(yàn)證用戶是否登陸

    這篇文章主要為大家詳細(xì)介紹了基于redis實(shí)現(xiàn)token驗(yàn)證用戶是否登陸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 關(guān)于Redis中bitmap的原理和使用詳解

    關(guān)于Redis中bitmap的原理和使用詳解

    這篇文章主要介紹了關(guān)于Redis中bitmap的原理和使用詳解,BitMap即位圖,使用每個位表示某種狀態(tài),適合處理整型的海量數(shù)據(jù),本質(zhì)上是哈希表的一種應(yīng)用實(shí)現(xiàn),需要的朋友可以參考下
    2023-05-05

最新評論