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

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

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

項目簡介

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

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

目的

  • 開箱即用,支持注解式和過程式調(diào)用
  • 基于 redis 的分布式鎖
  • 內(nèi)置支持多種 redis 的整合方式
  • 漸進式設(shè)計,可獨立于 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 的測試案例。

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())    // 鎖實現(xiàn)策略
        .lockKeyFormat(new LockKeyFormat())     // 針對 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 的默認配置。

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

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

public @interface EnableLock {

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

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

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

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

}

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

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

配置說明默認值
redis.addressredis 地址127.0.0.1
redis.portredis 端口6379
redis.passwordredis 密碼

使用 LockBs

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

@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 屬性說明,value 用于指定 key,支持 SPEL 表達式。

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

public @interface Lock {

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

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

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

    /**
     * 業(yè)務(wù)加鎖時間
     * @return 加鎖時間
     */
    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實現(xiàn)開箱即用的redis分布式鎖的詳細內(nèi)容,更多關(guān)于Java redis分布式鎖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java的作業(yè)調(diào)度類庫Quartz基本使用指南

    Java的作業(yè)調(diào)度類庫Quartz基本使用指南

    這篇文章主要介紹了Java的作業(yè)調(diào)度類庫Quartz基本使用指南,Quartz能夠讓類按照指定的計劃順序執(zhí)行,需要的朋友可以參考下
    2016-03-03
  • Spring boot2.x中集成H2數(shù)據(jù)庫代碼實例

    Spring boot2.x中集成H2數(shù)據(jù)庫代碼實例

    這篇文章主要介紹了Spring boot2.x中集成H2數(shù)據(jù)庫代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • java 同步、異步、阻塞和非阻塞分析

    java 同步、異步、阻塞和非阻塞分析

    這篇文章主要介紹了java 同步、異步、阻塞和非阻塞分析的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 最新評論