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

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

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

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

  • 可重入鎖問(wèn)題
  • 超時(shí)釋放問(wèn)題
  • 如果是集群 主從不一致問(wèn)題

依賴

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

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

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

    }


}

這里有三個(gè)參數(shù)

  • waitTime ----等待時(shí)間
  • leaseTime ----超時(shí)施放時(shí)間
  • TimeUnit ----時(shí)間單位

等待時(shí)間

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

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

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

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

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

超時(shí)施放時(shí)間

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

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

總結(jié)

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

相關(guān)文章

  • Jasypt對(duì)SpringBoot配置文件加密

    Jasypt對(duì)SpringBoot配置文件加密

    數(shù)據(jù)庫(kù)密碼直接明文寫(xiě)在配置中,對(duì)安全來(lái)說(shuō),是一個(gè)很大的挑戰(zhàn)。一旦密碼泄漏,將會(huì)帶來(lái)很大的安全隱患。尤其在一些企業(yè)對(duì)安全性要求很高,因此我們就考慮如何對(duì)密碼進(jìn)行加密。本文著重介紹Jasypt對(duì)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工具和第三方庫(kù)來(lái)實(shí)現(xiàn)Jar包的加密和解密,感興趣的朋友一起看看吧
    2024-02-02
  • sentinel整合ribbon與fallback流程分步講解

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

    這篇文章主要介紹了sentinel整合ribbon與fallback分步流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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為例),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    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)示例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-09-09
  • 一文詳細(xì)springboot實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的整合步驟

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

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

    Java中抽象類與方法的重寫(xiě)方式

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

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

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

    詳解RabbitMQ核心機(jī)制

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

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

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

最新評(píng)論

长武县| 东安县| 镇平县| 无锡市| 阳江市| 井研县| 云阳县| 石泉县| 会宁县| 左权县| 永清县| 扎囊县| 东乌珠穆沁旗| 南平市| 洮南市| 蛟河市| 麦盖提县| 札达县| 钦州市| 平原县| 辽中县| 杨浦区| 错那县| 义马市| 高陵县| 松阳县| 兴义市| 临泉县| 合水县| 仙居县| 贵州省| 永年县| 南陵县| 中山市| 错那县| 河北省| 双鸭山市| 宝兴县| 武功县| 新营市| 富阳市|