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

redisson.tryLock()參數(shù)的使用及理解

 更新時間:2024年04月29日 10:18:28   作者:九伯都  
這篇文章主要介紹了redisson.tryLock()參數(shù)的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

因?yàn)閞edis的 setnx 還是有諸多問題,這里使用redisson,當(dāng)然,正常來說,redis的setnx已經(jīng)夠用了

  • 可重入鎖問題
  • 超時釋放問題
  • 如果是集群 主從不一致問題

依賴

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.13.6</version>
        </dependency>

配置

package com.hmdp.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RedissonConfig {

    @Bean
    public RedissonClient redissonClient(){

        Config config = new Config();

        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
//        config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("123456");

        return Redisson.create(config);
    }

}

使用

package com.hmdp;

import com.hmdp.entity.SeckillVoucher;
import com.hmdp.service.ISeckillVoucherService;
import com.hmdp.service.impl.SeckillVoucherServiceImpl;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
public class HmDianPingApplicationTests {


    @Resource
    private RedissonClient redissonClient;


    @Test
    public void testRedisson() {

        long shopId = 147852478L;

        /*這樣獲取的是一把 可重入鎖*/
        RLock lock = redissonClient.getLock("lock:order:" + shopId);

        /*等待時間,超時施放時間,時間單位
        * 不傳遞參數(shù)默認(rèn)值是:不等待(-1),30秒*/
        boolean b = lock.tryLock();

        if (!b) {
            System.out.println("獲取鎖失敗");
        }

        try{
            System.out.println("執(zhí)行業(yè)務(wù)邏輯");
        }finally {
            lock.unlock();
        }

    }


}

這里有三個參數(shù)

  • waitTime ----等待時間
  • leaseTime ----超時施放時間
  • TimeUnit ----時間單位

等待時間

如果ABC…多個線程去搶奪一把鎖,A成功了,如果設(shè)置的是 -1,那么BCD。。。。就不等待,直接返回失敗,也就是不再去搶奪鎖了,一次失敗,直接放棄。

如果不是-1,假如說是 10(單位是秒)那么BCD…失敗后會擇機(jī)再次去搶奪,這里的擇機(jī)搶奪,就代表著不是 與A搶奪失敗后的立馬再次搶奪,因?yàn)椤久髦繟搶過鎖之后會執(zhí)行自己的業(yè)務(wù),需要一定的時間,那么

BCD。。。立馬再去搶奪鎖的意義在哪里呢? 除了徒增cpu的負(fù)擔(dān),沒有太大意義】 。所以這里的擇機(jī)搶奪,其實(shí)是利用了 發(fā)布,訂閱機(jī)制。

從上面的圖片可以看到,A搶過鎖之后,執(zhí)行業(yè)務(wù),結(jié)束之后釋放鎖,釋放鎖的時候還 publish (發(fā)布)了一個信號,而有人發(fā)布,就有人訂閱,發(fā)布人是A,訂閱人是BCD…,所以說這里的擇機(jī)再次搶奪是在BCD…接收到A發(fā)布的消息之后再去搶奪。

當(dāng)然了,從第一次與A搶奪失敗,到等待A完成業(yè)務(wù)發(fā)布消息這段等待時間+ 第一次和A搶奪鎖的時間 總數(shù)不能超過10s,畢竟10s 就是硬性規(guī)定,10s之內(nèi),不論發(fā)生多么復(fù)雜的邏輯,只要拿到鎖就行,不行就直接放棄。

超時施放時間

就是說 A拿到了鎖之后, 如果發(fā)生了一些異常錯誤,內(nèi)部業(yè)務(wù)沒能正常的執(zhí)行,沒能正常執(zhí)行釋放鎖的操作,這個時候 這個超時施放時間才會起作用,也就是說,在A搶到鎖之后,即便A的業(yè)務(wù)出現(xiàn)了堵塞,但是只要沒發(fā)生一些異常情況,這里的超時施放時間是不起作用的,因?yàn)橹灰话l(fā)生異常,內(nèi)部就會有一個 看門狗,每隔 超時施放時間/3就會刷新一次鎖的過期時間(是一個定時任務(wù)),確保A能夠執(zhí)行完成業(yè)務(wù),當(dāng)然,A執(zhí)行完業(yè)務(wù)后,會刪除刷新有效期的定時任務(wù)。

所以說,超時釋放時間在正常執(zhí)行業(yè)務(wù)的時候,是不發(fā)揮作用的,只在出現(xiàn)異常的時候才會起作用。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Jasypt對SpringBoot配置文件加密

    Jasypt對SpringBoot配置文件加密

    數(shù)據(jù)庫密碼直接明文寫在配置中,對安全來說,是一個很大的挑戰(zhàn)。一旦密碼泄漏,將會帶來很大的安全隱患。尤其在一些企業(yè)對安全性要求很高,因此我們就考慮如何對密碼進(jìn)行加密。本文著重介紹Jasypt對SpringBoot配置文件加密。
    2021-05-05
  • Spring?Boot項(xiàng)目Jar包加密實(shí)戰(zhàn)教程

    Spring?Boot項(xiàng)目Jar包加密實(shí)戰(zhàn)教程

    本文詳細(xì)介紹了如何在Spring?Boot項(xiàng)目中實(shí)現(xiàn)Jar包加密,我們首先了解了Jar包加密的基本概念和作用,然后學(xué)習(xí)了如何使用Spring?Boot的Jar工具和第三方庫來實(shí)現(xiàn)Jar包的加密和解密,感興趣的朋友一起看看吧
    2024-02-02
  • sentinel整合ribbon與fallback流程分步講解

    sentinel整合ribbon與fallback流程分步講解

    這篇文章主要介紹了sentinel整合ribbon與fallback分步流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java關(guān)于遠(yuǎn)程調(diào)試程序教程(以Eclipse為例)

    Java關(guān)于遠(yuǎn)程調(diào)試程序教程(以Eclipse為例)

    這篇文章主要介紹了Java關(guān)于遠(yuǎn)程調(diào)試程序教程(以Eclipse為例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Spring Boot使用注解重構(gòu)IoC容器的實(shí)戰(zhàn)示例

    Spring Boot使用注解重構(gòu)IoC容器的實(shí)戰(zhàn)示例

    這篇文章給大家介紹Spring Boot使用注解重構(gòu)IoC容器的實(shí)戰(zhàn)示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-09-09
  • 一文詳細(xì)springboot實(shí)現(xiàn)MySQL數(shù)據(jù)庫的整合步驟

    一文詳細(xì)springboot實(shí)現(xiàn)MySQL數(shù)據(jù)庫的整合步驟

    Spring Boot可以很方便地與MySQL數(shù)據(jù)庫進(jìn)行整合,下面這篇文章主要給大家介紹了關(guān)于springboot實(shí)現(xiàn)MySQL數(shù)據(jù)庫的整合步驟,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Java中抽象類與方法的重寫方式

    Java中抽象類與方法的重寫方式

    這篇文章主要介紹了Java中抽象類與方法的重寫方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):單,雙向鏈表

    java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):單,雙向鏈表

    這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • 詳解RabbitMQ核心機(jī)制

    詳解RabbitMQ核心機(jī)制

    MQ 主要用于分布式系統(tǒng)之間的通信,解決數(shù)據(jù)傳遞的效率和可靠性問題,本文給大家介紹RabbitMQ核心機(jī)制,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • SpringBoot實(shí)現(xiàn)攔截器、過濾器、監(jiān)聽器過程解析

    SpringBoot實(shí)現(xiàn)攔截器、過濾器、監(jiān)聽器過程解析

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)攔截器、過濾器、監(jiān)聽器過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論

龙南县| 石门县| 厦门市| 黑龙江省| 辽阳县| 永善县| 芜湖市| 绵竹市| 两当县| 交口县| 湖北省| 陆川县| 阜康市| 手机| 鸡西市| 时尚| 临猗县| 鄂尔多斯市| 浮梁县| 青田县| 浦城县| 睢宁县| 呼图壁县| 裕民县| 曲水县| 南宁市| 佛山市| 枣庄市| 清原| 治多县| 兰州市| 垫江县| 遂昌县| 清涧县| 隆子县| 赤壁市| 温州市| 西城区| 万源市| 太和县| 阳春市|