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

java中redissonClient 分布式鎖的使用

 更新時間:2024年03月03日 10:54:05   作者:努力提升的菜鳥程序員  
在集群的情況下,用戶多次請求接口時,存入的內(nèi)容可能會導(dǎo)致重復(fù),這時候就可以使用分布式鎖來限制,本文就來介紹一下java中redissonClient 分布式鎖的使用,感興趣的可以了解一下

在集群的情況下,用戶多次請求接口時,存入的內(nèi)容可能會導(dǎo)致重復(fù),這時候就可以使用分布式鎖來限制

適用場景

分布式應(yīng)用,分布式緩存,分布式回話管理,分布式服務(wù)(任務(wù),延遲任務(wù),執(zhí)行器),分布式redis客戶端

第一步:導(dǎo)入依賴

<!-- redis 分布式鎖框架 -->
		<dependency>
			<groupId>org.redisson</groupId>
			<artifactId>redisson</artifactId>
			<version>3.12.5</version>
		</dependency>

第二步:配置連接redis

程序化配置方法

Config config = new Config();
//存放在哪個服務(wù)器的redisIP地址加redis端口號
config. useSingleServer().setAddress("127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);

驗證是否連接成功

redisson.getConfig().toJSON().toString()

結(jié)果

{"singleServerConfig":{"idleConnectionTimeout":10000,"pingTimeout":1000,"connectTimeout":10000,"timeout":3000,"retryAttempts":3,"retryInterval":1500,"reconnectionTimeout":3000,"failedAttempts":3,"subscriptionsPerConnection":5,"address":"redis://127.0.0.1:6379","subscriptionConnectionMinimumIdleSize":1,"subscriptionConnectionPoolSize":50,"connectionMinimumIdleSize":10,"connectionPoolSize":64,"database":0,"dnsMonitoring":false,"dnsMonitoringInterval":5000},"threads":0,"nettyThreads":0,"codec":{"class":"org.redisson.codec.JsonJacksonCodec"},"codecProvider":{"class":"org.redisson.codec.DefaultCodecProvider"},"resolverProvider":{"class":"org.redisson.liveobject.provider.DefaultResolverProvider"},"redissonReferenceEnabled":true,"useLinuxNativeEpoll":false}

測試寫法

public class LockExamples {
    public static void main(String[] args) throws InterruptedException {
        // 默認(rèn)連接上127.0.0.1:6379
        RedissonClient client = Redisson.create();
        // RLock 繼承了 java.util.concurrent.locks.Lock 接口
        RLock lock = client.getLock("lock");

        lock.lock();
        System.out.println("lock acquired");

        Thread t = new Thread(() -> {
            //獲取鎖,傳入要鎖的key
            RLock lock1 = client.getLock("lock");
            //獲取鎖
            lock1.lock();
            System.out.println("lock acquired by thread");
            //解鎖
            lock1.unlock();
            System.out.println("lock released by thread");
        });

        t.start();
        t.join(1000);
        
        lock.unlock();
        System.out.println("lock released");

        t.join();

        client.shutdown();
    }
}

飛花令的寫法

    @Override
    @Transactional(rollbackFor = Exception.class)
    public FlyingFlowerV1Vo insert(FlyingFlowerReq flyingFlowerReq, String userId) throws Exception {
        //對進(jìn)來的用戶加鎖
        RLock userLock = redissonClient.getLock(RedissonKey.USER_ID + userId);
        try{
            //嘗試加鎖, 最多等待1秒, 1000秒后自動解鎖
            boolean getUserLock = userLock.tryLock(1, 1000, TimeUnit.MILLISECONDS);
            if (getUserLock) {
                //業(yè)務(wù)邏輯的代碼,通常在插入修改的操作方法上進(jìn)行加鎖
        }catch (Exception e){
            //提示
            System.out.println("接令頻繁"+ userId);
            throw new ResultInfo(ResultUtils.error("接令頻繁,請稍后再試"));
        }finally {
            //解鎖
            if (userLock.isLocked()) {
                if (userLock.isHeldByCurrentThread()) {
                    userLock.unlock();
                }
            }
        }
        return null;
    }

到此這篇關(guān)于java中redissonClient 分布式鎖的使用的文章就介紹到這了,更多相關(guān)java redissonClient 分布式鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Spring-Boot中如何使用@Value注解注入集合類

    在Spring-Boot中如何使用@Value注解注入集合類

    這篇文章主要介紹了在Spring-Boot中如何使用@Value注解注入集合類的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 如何使用Idea搭建全注解式開發(fā)的SpringMVC項目

    如何使用Idea搭建全注解式開發(fā)的SpringMVC項目

    這篇文章主要介紹了如何使用Idea搭建全注解式開發(fā)的SpringMVC項目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • RocketMQ?Namesrv架構(gòu)工作原理詳解

    RocketMQ?Namesrv架構(gòu)工作原理詳解

    這篇文章主要為大家介紹了RocketMQ?Namesrv架構(gòu)工作原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • java啟動jar包設(shè)置啟動參數(shù)的實現(xiàn)

    java啟動jar包設(shè)置啟動參數(shù)的實現(xiàn)

    本文主要介紹了java啟動jar包設(shè)置啟動參數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring boot按日切分spring boot的nohup.out日志文件的方法

    Spring boot按日切分spring boot的nohup.out日志文件的方法

    過大的日志文件維護(hù)起來存在諸多問題,所以最好是能夠按日或按大小切分日志文件,下面小編給大家?guī)砹薙pring boot按日切分spring boot的nohup.out日志文件的方法,一起看看吧
    2018-08-08
  • JPA延遲加載no Session報錯解決分析

    JPA延遲加載no Session報錯解決分析

    這篇文章主要為大家介紹了JPA延遲加載no Session報錯解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java 3D入門之基本圖形功能 附源碼

    Java 3D入門之基本圖形功能 附源碼

    Java3D API是Sun定義的用于實現(xiàn)3D顯示的接口。3D技術(shù)是底層的顯示技術(shù),Java3D提供了基于Java的上層接口。Java3D把OpenGL和DirectX這些底層技術(shù)包裝在Java接口中。這種全新的設(shè)計使3D技術(shù)變得不再繁瑣且可以加入到J2SE、J2EE的整套架構(gòu),故保證了Java3D技術(shù)強(qiáng)大的擴(kuò)展性
    2021-10-10
  • Servlet會話技術(shù)基礎(chǔ)解析

    Servlet會話技術(shù)基礎(chǔ)解析

    這篇文章主要介紹了Servlet會話技術(shù)基礎(chǔ)解析,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • String字符串拼接方法concat和+的效率對比

    String字符串拼接方法concat和+的效率對比

    這篇文章主要介紹了String字符串拼接方法concat和+的效率對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SparkSQL中的JSON內(nèi)置函數(shù)全解析

    SparkSQL中的JSON內(nèi)置函數(shù)全解析

    你是否曾經(jīng)為處理JSON數(shù)據(jù)而頭疼?SparkSQL為我們提供了強(qiáng)大的內(nèi)置JSON函數(shù),讓JSON處理變得輕而易舉,本文將帶你深入了解這些函數(shù),感興趣的朋友一起看看吧
    2024-08-08

最新評論