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

Java實(shí)現(xiàn)開箱即用的redis分布式鎖

 更新時(shí)間:2022年12月08日 14:51:36   作者:老馬嘯西風(fēng)  
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)開箱即用的基于redis的分布式鎖,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以收藏一下

項(xiàng)目簡(jiǎn)介

lock 為 java 設(shè)計(jì)的分布式鎖,開箱即用,縱享絲滑。

開源地址:https://github.com/houbb/lock

目的

  • 開箱即用,支持注解式和過(guò)程式調(diào)用
  • 基于 redis 的分布式鎖
  • 內(nèi)置支持多種 redis 的整合方式
  • 漸進(jìn)式設(shè)計(jì),可獨(dú)立于 spring 使用
  • 整合 spring
  • 整合 spring-boot

快速開始

需要

jdk1.7+

maven 3.x+

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>lock-core</artifactId>
    <version>1.3.0</version>
</dependency>

入門例子

基于本地 redis 的測(cè)試案例。

public void helloTest() {
    ILock lock = LockBs.newInstance();
    String key = "ddd";
    try {
        // 加鎖
        lock.tryLock(key);
        System.out.println("業(yè)務(wù)處理");
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        // 釋放鎖
        lock.unlock(key);
    }
}

配置化

為了便于拓展,LockBs 的配置支持自定義:

LockBs.newInstance()
        .id(Ids.uuid32())   //id 生成策略
        .cache(JedisRedisServiceFactory.pooled("127.0.0.1", 6379)) //緩存策略
        .lockSupport(new RedisLockSupport())    // 鎖實(shí)現(xiàn)策略
        .lockKeyFormat(new LockKeyFormat())     // 針對(duì) key 的格式化處理策略
        .lockReleaseFailHandler(new LockReleaseFailHandler())   //釋放鎖失敗處理
        ;

整合 spring

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>lock-spring</artifactId>
    <version>1.3.0</version>
</dependency>

指定 bean 使用

啟用分布式鎖

@EnableLock 啟用分布式鎖。

@EnableRedisConfig 啟用 redis 的默認(rèn)配置。

@Configurable
@ComponentScan(basePackages = "com.github.houbb.lock.test.service")
@EnableLock
@EnableRedisConfig
public class SpringConfig {
}

EnableLock 注解說(shuō)明,和引導(dǎo)類對(duì)應(yīng):

public @interface EnableLock {

    /**
     * 唯一標(biāo)識(shí)生成策略
     * @return 結(jié)果
     */
    String id() default "lockId";

    /**
     * 緩存實(shí)現(xiàn)策略 bean 名稱
     *
     * 默認(rèn)引入 redis-config 中的配置
     *
     * @return 實(shí)現(xiàn)
     */
    String cache() default "springRedisService";

    /**
     * 加鎖 key 格式化策略
     * @return 策略
     */
    String lockKeyFormat() default "lockKeyFormat";

    /**
     * 鎖釋放失敗處理類
     * @return 結(jié)果
     */
    String lockReleaseFailHandler() default "lockReleaseFailHandler";

}

其中 springRedisService 使用的是 redis-config 中的實(shí)現(xiàn)。

對(duì)應(yīng)注解 @EnableRedisConfig,redis 的配置信息如下:

配置說(shuō)明默認(rèn)值
redis.addressredis 地址127.0.0.1
redis.portredis 端口6379
redis.passwordredis 密碼

使用 LockBs

我們可以直接 LockBs 的引導(dǎo)類,這種適合一些更加靈活的場(chǎng)景。

@ContextConfiguration(classes = SpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringServiceRawTest {

    @Autowired
    private UserService userService;

    @Autowired
    private LockBs lockBs;

    @Test
    public void queryLogTest() {
        final String key = "name";
        try {
            lockBs.tryLock(key);
            final String value = userService.rawUserName(1L);
        } catch (Exception exception) {
            throw new RuntimeException(exception);
        } finally {
            lockBs.unlock(key);
        }
    }

}

aop 注解使用

指定方法注解

當(dāng)然,我們可以在方法上直接指定注解 @Lock,使用更加方便。

直接使用,AOP 切面生效即可。

@Service
public class UserService {

    @Lock
    public String queryUserName(Long userId) {
    }

    @Lock(value = "#user.name")
    public void queryUserName2(User user) {
    }
}

@Lock 屬性說(shuō)明,value 用于指定 key,支持 SPEL 表達(dá)式。

其他屬性,和引導(dǎo)類的方法參數(shù)一一對(duì)應(yīng)。

public @interface Lock {

    /**
     * 緩存的 key 策略,支持 SpEL
     * @return 結(jié)果
     */
    String value() default "";

    /**
     * 時(shí)間單位
     * @return 單位
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 等待鎖時(shí)間
     * @return 等待鎖時(shí)間
     */
    long waitLockTime() default 10;

    /**
     * 業(yè)務(wù)加鎖時(shí)間
     * @return 加鎖時(shí)間
     */
    long lockTime() default 60;

}

spring boot 整合

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>lock-springboot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

使用

同 spring

后期 Road-MAP

支持鎖的可重入

持有鎖的線程可以多次獲取鎖

分布式鎖注解支持

以上就是Java實(shí)現(xiàn)開箱即用的redis分布式鎖的詳細(xì)內(nèi)容,更多關(guān)于Java redis分布式鎖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java 將字符串追加到文件已有內(nèi)容后面的操作

    java 將字符串追加到文件已有內(nèi)容后面的操作

    這篇文章主要介紹了java 將字符串追加到文件已有內(nèi)容后面的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • mybatis使用foreach踩坑及解決

    mybatis使用foreach踩坑及解決

    這篇文章主要介紹了mybatis使用foreach踩坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot2.7.14整合redis7的詳細(xì)過(guò)程

    SpringBoot2.7.14整合redis7的詳細(xì)過(guò)程

    這篇文章主要介紹了SpringBoot2.7.14整合redis7的詳細(xì)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-10-10
  • spring boot打包成war包的頁(yè)面如何存放

    spring boot打包成war包的頁(yè)面如何存放

    這篇文章主要介紹了spring boot打包成war包的頁(yè)面該放到哪里,很多朋友對(duì)這個(gè)問(wèn)題都很疑惑,今天小編給大家分享一篇教程,需要的朋友可以參考下
    2019-11-11
  • Java設(shè)計(jì)模式之接口隔離原則精解

    Java設(shè)計(jì)模式之接口隔離原則精解

    設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。本篇介紹設(shè)計(jì)模式七大原則之一的接口隔離原則
    2022-02-02
  • SpringBoot整合jnotify實(shí)現(xiàn)針對(duì)指定目錄及其(動(dòng)態(tài))子目錄的監(jiān)聽的方法

    SpringBoot整合jnotify實(shí)現(xiàn)針對(duì)指定目錄及其(動(dòng)態(tài))子目錄的監(jiān)聽的方法

    本文介紹了JNotify這一Java庫(kù)在SpringBoot中的應(yīng)用,JNotify允許應(yīng)用程序監(jiān)聽文件系統(tǒng)事件,包括文件夾/文件的創(chuàng)建、刪除、修改和重命名,由于JNotify底層調(diào)用的關(guān)鍵部分是C語(yǔ)言開發(fā)的,所以在使用前需要在系統(tǒng)中加入相應(yīng)的動(dòng)態(tài)庫(kù)
    2024-10-10
  • java實(shí)現(xiàn)圖片任意角度旋轉(zhuǎn)

    java實(shí)現(xiàn)圖片任意角度旋轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖片任意角度旋轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java分代垃圾回收策略原理詳解

    Java分代垃圾回收策略原理詳解

    這篇文章主要介紹了Java分代垃圾回收策略原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Swagger3.0 整合spring boot2.7x避免swagger2.0與boot2.7沖突問(wèn)題

    Swagger3.0 整合spring boot2.7x避免swagger2.0與boot2.7沖突

    這篇文章主要介紹了Swagger3.0 整合spring boot2.7x避免swagger2.0與boot2.7沖突問(wèn)題,通過(guò)注釋掉2.0引入的倆包,直接引入3.0,文中結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • java設(shè)計(jì)模式之工廠方法模式

    java設(shè)計(jì)模式之工廠方法模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之工廠方法模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論

正安县| 称多县| 卢湾区| 湘西| 新安县| 吉首市| 湘潭市| 汝南县| 平潭县| 卢湾区| 司法| 刚察县| 清苑县| 大方县| 安乡县| 抚松县| 安西县| 哈巴河县| 鸡东县| 略阳县| 万宁市| 鄂托克前旗| 城固县| 安达市| 芒康县| 龙岩市| 元阳县| 珲春市| 怀来县| 都昌县| 贡嘎县| 定兴县| 滁州市| 青龙| 阜新市| 清新县| 运城市| 仪陇县| 长春市| 喜德县| 黔西|