国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis與分布式-分布式鎖

這篇具有很好參考價值的文章主要介紹了Redis與分布式-分布式鎖。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

接上文 Redis與分布式-集群搭建

1.分布式鎖

Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
為了解決上述問題,可以利用分布式鎖來實現(xiàn)。
重新復(fù)制一份redis,配置文件都是剛下載時候的不用更改,然后啟動redis服務(wù)和redis客戶。
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
redis存在這樣的命令:和set命令差不多,但是它有一個機制,當(dāng)指定的key不存在的時候,才能進行插入,實際上就是 set if not exists的縮寫,當(dāng)key被刪除后可以進行插入。

setnx key value

Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫

利用這種特性,可以再不同的服務(wù)中實現(xiàn)分布式鎖。但是若某個服務(wù)加了鎖并且卡頓了,或者崩潰,那么這把鎖永遠(yuǎn)無法釋放了,因此可以加過期時間:set a666 EX 5 NX

Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫

如果學(xué)習(xí)過JUC并發(fā)編程,會發(fā)現(xiàn)若在超時之前那一刻進入到釋放鎖的階段,獲取到的值肯定還是自己,但是在即將執(zhí)行刪除之前,由于超時機制導(dǎo)致被刪除并且其他任務(wù)也加鎖了,那么這時候在刪除,仍會導(dǎo)致刪除其他任務(wù)加的鎖
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
導(dǎo)入Redisson依賴

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

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.75.Final</version>
</dependency>

Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
不加鎖的情況

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                try(Jedis jedis = new Jedis("192.168.0.10", 6379)){
                    for (int j = 0; j < 100; j++) {   //每個客戶端獲取a然后增加a的值再寫回去,如果不加鎖那么肯定會出問題
                        int a = Integer.parseInt(jedis.get("a")) + 1;
                        jedis.set("a", a+"");
                    }
                }
            }).start();
        }
    }

在redis中設(shè)置a=0,然后測試不加鎖
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
取出a,得出結(jié)果不對
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫
測試加鎖

public static void main(String[] args) {
    Config config = new Config();
    config.useSingleServer().setAddress("redis://192.168.0.10:6379");   //配置連接的Redis服務(wù)器,也可以指定集群
    RedissonClient client =  Redisson.create(config);   //創(chuàng)建RedissonClient客戶端
    for (int i = 0; i < 10; i++) {
        new Thread(() -> {
            try(Jedis jedis = new Jedis("192.168.0.10", 6379)){
                RLock lock = client.getLock("testLock");    //指定鎖的名稱,拿到鎖對象
                for (int j = 0; j < 100; j++) {
                    lock.lock();    //加鎖
                    int a = Integer.parseInt(jedis.get("a")) + 1;
                    jedis.set("a", a+"");
                    lock.unlock();   //解鎖
                }
            }
            System.out.println("結(jié)束!");
        }).start();
    }
}

執(zhí)行完a的值加了1000,此時寫入為正常
Redis與分布式-分布式鎖,SpringCloud Alibaba,redis,分布式,數(shù)據(jù)庫

此時若用于存放鎖的redis服務(wù)掛了,那么肯定會出問題的,這個時候可以用RedLock,它的思路是在多個redis服務(wù)器上保持鎖,只需要超過半數(shù)的redis服務(wù)獲取到鎖,那么就真的獲取到鎖了,這樣掛掉一部分節(jié)點,也能保證正常運行。文章來源地址http://www.zghlxwxcb.cn/news/detail-728117.html

到了這里,關(guān)于Redis與分布式-分布式鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • (黑馬出品_高級篇_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    (黑馬出品_高級篇_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文檔是在心向陽光的天域的博客加了一些有助于自己的知識體系,也歡迎大家關(guān)注這個大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是這個視頻](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 消息隊列在使用過程中,面

    2024年03月19日
    瀏覽(26)
  • 【業(yè)務(wù)功能篇87】微服務(wù)-springcloud-本地緩存-redis-分布式緩存-緩存穿透-雪崩-擊穿

    【業(yè)務(wù)功能篇87】微服務(wù)-springcloud-本地緩存-redis-分布式緩存-緩存穿透-雪崩-擊穿

    ??緩存的作用是減低對數(shù)據(jù)源的訪問頻率。從而提高我們系統(tǒng)的性能。 緩存的流程圖 2.1 本地緩存 ??其實就是把緩存數(shù)據(jù)存儲在內(nèi)存中(Map String,Object ).在單體架構(gòu)中肯定沒有問題。 單體架構(gòu)下的緩存處理 2.2 分布式緩存 ??在分布式環(huán)境下,我們原來的本地緩存就不是

    2024年02月10日
    瀏覽(31)
  • 分布式事務(wù) —— SpringCloud Alibaba Seata

    傳統(tǒng)的單體應(yīng)用中,業(yè)務(wù)操作使用同一條連接操作不同的數(shù)據(jù)表,一旦出現(xiàn)異常就可以整體回滾。隨著公司的快速發(fā)展、業(yè)務(wù)需求的變化,單體應(yīng)用被拆分成微服務(wù)應(yīng)用,原來的單體應(yīng)用被拆分成多個獨立的微服務(wù),分別使用獨立的數(shù)據(jù)源,業(yè)務(wù)操作需要調(diào)用三個服務(wù)來完成

    2024年02月08日
    瀏覽(18)
  • 【業(yè)務(wù)功能100】補充代碼【業(yè)務(wù)功能88】微服務(wù)-springcloud-分布式鎖-redis-redisson-springcache

    采用redisson做分布式鎖,完成數(shù)據(jù)的查詢接口功能getCatelog2JSONRedis 原先從mysql數(shù)據(jù)庫查詢的效率較低,現(xiàn)在將部分固定數(shù)據(jù)展示比如頁面的樹形欄目信息等,存儲到 redis緩存 ,然后基于分布式集群,需要結(jié)合本地鎖(synchronized )與分布式鎖(redissonClient.getLock(“catelog2JSON-lock”

    2024年02月09日
    瀏覽(26)
  • 分布式天梯圖算法在 Redis 圖數(shù)據(jù)庫中的應(yīng)用

    Redis是一個高性能的鍵值對數(shù)據(jù)庫,支持常用的數(shù)據(jù)結(jié)構(gòu)和分布式操作,被廣泛應(yīng)用于緩存、消息隊列和排行榜等場景。除了基本的數(shù)據(jù)結(jié)構(gòu),Redis還支持圖數(shù)據(jù)結(jié)構(gòu)并提供了一些算法支持。 天梯圖算法是一種基于貪心的圖搜索算法,在尋找最短路徑問題中具有很高的效率。

    2024年02月14日
    瀏覽(26)
  • SpringCloud Alibaba-Seata分布式事務(wù)

    SpringCloud Alibaba-Seata分布式事務(wù)

    維基百科:https://zh.wikipedia.org/wiki/X/Open_XA 分布式事務(wù)的實現(xiàn)有許多種,其中較經(jīng)典是由Tuxedo提出的XA分布式事務(wù)協(xié)議,XA協(xié)議包含二階段提交(2PC)和三階段提交(3PC)兩種實現(xiàn)。其他還有 TCC、MQ 等最終一致性解決方案。 1.1 DTP模型 https://www.ibm.com/docs/zh/db2/10.5?topic=managers-de

    2024年02月09日
    瀏覽(24)
  • Java中利用Redis,ZooKeeper,數(shù)據(jù)庫等實現(xiàn)分布式鎖(遙遙領(lǐng)先)

    Java中利用Redis,ZooKeeper,數(shù)據(jù)庫等實現(xiàn)分布式鎖(遙遙領(lǐng)先)

    1.1 什么是分布式鎖 在我們進行單機應(yīng)用開發(fā)涉及并發(fā)同步的時候,我們往往采用synchronized或者ReentrantLock的方式來解決多線程間的代碼同步問題。但是當(dāng)我們的應(yīng)用是在分布式集群工作的情況下,那么就需要一種更加高級的鎖機制,來處理種跨機器的進程之間的數(shù)據(jù)同步問題

    2024年02月03日
    瀏覽(26)
  • 在Spring中,可以使用不同的方式來實現(xiàn)分布式鎖,例如基于數(shù)據(jù)庫、Redis、ZooKeeper等

    在Spring中,可以使用不同的方式來實現(xiàn)分布式鎖,例如基于數(shù)據(jù)庫、Redis、ZooKeeper等

    在Spring中,可以使用不同的方式來實現(xiàn)分布式鎖,例如基于數(shù)據(jù)庫、Redis、ZooKeeper等。下面是兩種常見的實現(xiàn)方式: 使用Redis實現(xiàn)分布式鎖: 使用自定義注解實現(xiàn)本地鎖: 以上是兩種常見的在Spring中實現(xiàn)分布式鎖的方式。第一種方式使用Redis作為分布式鎖的存儲介質(zhì),通過

    2024年03月17日
    瀏覽(24)
  • SpringCloud Alibaba - Seata 四種分布式事務(wù)解決方案(XA、AT)+ 實踐部署(上)

    SpringCloud Alibaba - Seata 四種分布式事務(wù)解決方案(XA、AT)+ 實踐部署(上)

    目錄 一、Seata 分布式事務(wù)解決方案 1.1、XA 模式 1.1.1、XA模式理論 第一階段: 第二階段: 1.1.2、Seata 框架中的 XA 模式 第一階段: 第二階段: 1.1.3、XA 模式的優(yōu)缺點 1.2.4、實現(xiàn)Seata 的?XA 模式 a)修改 application 文件(每一個參與事務(wù)的微服務(wù)) b)給發(fā)起全局事務(wù)中的入口方法

    2024年04月14日
    瀏覽(19)
  • 最新版 !快速掌握 JDK17 + springboot3 + springcloud Alibaba : 10、Seata 整合實現(xiàn)分布式事務(wù)

    最新版 !快速掌握 JDK17 + springboot3 + springcloud Alibaba : 10、Seata 整合實現(xiàn)分布式事務(wù)

    上一節(jié)成功啟動了seata,傳送門: https://blog.csdn.net/qq_16089135/article/details/133989446 1.1 官方文檔 中文文檔 Seata 是什么 1.2 模式分類 AT :基于支持本地 ACID 事務(wù)的關(guān)系型數(shù)據(jù)庫。 Java 應(yīng)用,通過 JDBC 訪問數(shù)據(jù)庫。 整體機制:二階段提交。 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一

    2024年02月06日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包