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

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

這篇具有很好參考價值的文章主要介紹了【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【redis】redis分布式鎖(二)可重入鎖



前言

上一篇鏈接: 【redis】redis分布式鎖(一)手寫分布式鎖1.0~6.0

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式


一、可重入鎖(又名遞歸鎖)

1、說明:

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

2、分開解釋:

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

3、可重入鎖的種類

隱式鎖(即synchronized關(guān)鍵字使用的鎖)默認(rèn)是可重入鎖

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

synchronized的重入實現(xiàn)機理

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

顯式鎖也有ReentrantLock這樣的可重入鎖

結(jié)論:
【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式


二、lock/unlock配合可重入鎖進行AQS源碼分析講解

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式


三、思考,上述可重入鎖計數(shù)問題,redis哪個數(shù)據(jù)類型可以替代?

1、涉及到可重入鎖,原來redis中string類型就無法滿足要求,因為沒法記錄加鎖幾次,也就沒法解鎖

2、需要用到hash類型作為可重入鎖:

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

3、案例命令:

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

4、小總結(jié) 太帥了!

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式


四、思考+設(shè)計重點(一橫一縱)

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式


五、lua腳本

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

1、redis命令過程分析:

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

2、加鎖lua腳本lock

下邊將使用lua腳本的方式,把可重入鎖的案例語句原子化

V1.0版本

藍色部分是重復(fù)的,可以合并
【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

V2.0版本

redis中,hincrby是具有hset的功能的,所以可以將條件合并
【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

V3.0版本

換成對應(yīng)的參數(shù)
【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

在redis中測試

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

3、解鎖lua腳本unlock

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

設(shè)計思路:先確定這個鎖是不是自己的 再去解鎖 最后刪除鎖

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

V1.0 V2.0加參數(shù)

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

測試

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式


六、將上述lua腳本整合進入Java程序

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式
對外不再暴露加解鎖的代碼,直接封裝成可執(zhí)行方法

1、v6.0不滿足可重入性,需要重新修改為v7.0

需要將加解鎖剝離出來, 封裝成可執(zhí)行方法
【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式
【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

2、初始版本

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

3、新建RedisDistributedLock類并實現(xiàn)JUC里的Lock接口

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

4、滿足JUC里的AQS對lock鎖的接口規(guī)范定義來進行實現(xiàn)落地代碼

5、結(jié)合設(shè)計模式開發(fā)屬于自己的redis分布式鎖工具類

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式
【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

a、在tryLock里實現(xiàn)結(jié)合lua腳本的加鎖

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

b、unlock

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

c、v7.0調(diào)用鎖

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

6、工廠模式引入

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

v7.0版本問題說明

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

引入工廠模式v7.1代碼 將分為工廠類、redis分布式鎖、業(yè)務(wù)類三個講解

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

工廠類 相當(dāng)于spring里在controller里的注入的service

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

redis分布式鎖 基本不變,但是在業(yè)務(wù)類中不再是直接調(diào)用,而是通過工廠類來間接調(diào)用

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

業(yè)務(wù)類,通過spring的注入工廠類,再調(diào)用對應(yīng)分布式鎖

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

七、測試可重入性

1、代碼

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式
【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

2、結(jié)果 有錯誤 原因是兩次進入鎖時,生成的uuid不一致

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

3、腦圖

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

4、解決

原因:是因為在設(shè)計redis鎖時,每次調(diào)用都會new一個uuid。

解決方法:在工廠類直接new,這樣保證了同一次調(diào)用使用的一個uuid

【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式文章來源地址http://www.zghlxwxcb.cn/news/detail-435718.html


到了這里,關(guān)于【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式的文章就介紹完了。如果您還想了解更多內(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)文章

  • redis — redis cluster集群模式下如何實現(xiàn)批量可重入鎖?

    redis — redis cluster集群模式下如何實現(xiàn)批量可重入鎖?

    一、redis cluster 集群版 在Redis 3.0版本以后,Redis發(fā)布了Redis Cluster。該集群主要支持搞并發(fā)和海量數(shù)據(jù)處理等優(yōu)勢,當(dāng) Redis 在集群模式下運行時,它處理數(shù)據(jù)存儲的方式與作為單個實例運行時不同。這是因為它應(yīng)該準(zhǔn)備好跨多個節(jié)點分發(fā)數(shù)據(jù),從而實現(xiàn)水平可擴展性。具體能力表

    2024年01月21日
    瀏覽(54)
  • 【面試 分布式鎖詳細解析】續(xù)命 自旋鎖 看門狗 重入鎖,加鎖 續(xù)命 解鎖 核心源碼,lua腳本解析,具體代碼和lua腳本如何實現(xiàn)

    自己實現(xiàn)鎖續(xù)命 在 controller 里開一個 線程 (可以為 守護線程) 每10秒,判斷一個 這個 UUID是否存在,如果 存在,重置為 30秒。 如果不存在,守護線程 也結(jié)束。 基本的key value 基本的使用 setIfAbsent存在不設(shè)置 16384 Redis 集群沒有使用一致性hash, 而是引入了哈希槽的概念。 R

    2023年04月09日
    瀏覽(27)
  • Java入門-可重入鎖

    Java入門-可重入鎖

    什么是可重入鎖? 當(dāng)線程獲取某個鎖后,還可以繼續(xù)獲取它,可以遞歸調(diào)用,而不會發(fā)生死鎖; 可重入鎖案例 程序可重入加鎖 A.class,沒有發(fā)生死鎖。 sychronized鎖 運行結(jié)果 ReentrantLock 運行結(jié)果 如何保證可重入 當(dāng)一個線程訪問同步塊并獲取鎖時,會在對象頭和棧幀中的鎖記錄里

    2024年02月22日
    瀏覽(26)
  • java~理解可重入鎖

    在Java中,可重入鎖(Reentrant Lock)是一種同步機制,允許線程在持有鎖的情況下再次獲取該鎖,而不會被自己所持有的鎖所阻塞。也就是說,一個線程可以多次獲得同一個鎖,而不會出現(xiàn)死鎖的情況。 可重入鎖在多線程編程中非常有用,它允許線程在訪問共享資源時多次獲取

    2024年02月09日
    瀏覽(25)
  • 并發(fā)編程之可重入鎖ReentrantLock

    并發(fā)編程之可重入鎖ReentrantLock

    大家都知道在并發(fā)編程中一般會用到多線程技術(shù),多線程技術(shù)可以大大增加系統(tǒng)QPS/TPS。但是在一些特殊的業(yè)務(wù)場景下我們需要限制線程的并發(fā)數(shù)目,比如秒殺系統(tǒng)、多種商品金額疊加運算等等都是需要限制線程數(shù)量。特別是在分布式微服務(wù)架構(gòu),多線程同步問題尤為明顯。一

    2023年04月25日
    瀏覽(43)
  • curator實現(xiàn)的zookeeper可重入鎖

    Curator是一個Apache開源的ZooKeeper客戶端庫,它提供了許多高級特性和工具類,用于簡化在分布式環(huán)境中使用ZooKeeper的開發(fā)。其中之一就是可重入鎖。 Curator提供了 InterProcessMutex 類來實現(xiàn)可重入鎖。以下是使用Curator實現(xiàn)ZooKeeper可重入鎖的示例: import org.apache.curator.framework.Curato

    2024年02月15日
    瀏覽(19)
  • 【Java | 多線程】可重入鎖的概念以及示例

    可重入鎖(又名遞歸鎖)是一種特殊類型的鎖,它允許 同一個線程在獲取鎖后再次進入該鎖保護的代碼塊或方法,而不需要重新獲取鎖 。 說白了,可重入鎖的特點就是同一個線程可以多次獲取同一個鎖,而不會因為之前已經(jīng)獲取過鎖而阻塞。 可重入鎖的一個優(yōu)點是可以一定

    2024年04月24日
    瀏覽(20)
  • JavaEE 初階篇-深入了解 CAS 機制與12種鎖的特征(如樂觀鎖和悲觀鎖、輕量級鎖與重量級鎖、自旋鎖與掛起等待鎖、可重入鎖與不可重入鎖等等)

    JavaEE 初階篇-深入了解 CAS 機制與12種鎖的特征(如樂觀鎖和悲觀鎖、輕量級鎖與重量級鎖、自旋鎖與掛起等待鎖、可重入鎖與不可重入鎖等等)

    ??博客主頁:?【 小扳_-CSDN博客】 ?感謝大家點贊??收藏?評論? 文章目錄 ? ? ? ? 1.0 樂觀鎖與悲觀鎖概述 ? ? ? ? 1.1 悲觀鎖(Pessimistic Locking) ? ? ? ? 1.2 樂觀鎖(Optimistic Locking) ? ? ? ? 1.3 區(qū)別與適用場景 ? ? ? ? 2.0 輕量級鎖與重量級鎖概述 ? ? ? ? 2.1 真正加

    2024年04月16日
    瀏覽(41)
  • Redis與分布式-分布式鎖

    Redis與分布式-分布式鎖

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

    2024年02月07日
    瀏覽(27)
  • 【分布式技術(shù)專題】「分布式技術(shù)架構(gòu)」 探索Tomcat技術(shù)架構(gòu)設(shè)計模式的奧秘(Server和Service組件原理分析)

    【分布式技術(shù)專題】「分布式技術(shù)架構(gòu)」 探索Tomcat技術(shù)架構(gòu)設(shè)計模式的奧秘(Server和Service組件原理分析)

    Tomcat的總體結(jié)構(gòu)從外到內(nèi)進行分布,最大范圍的服務(wù)容器是Server組件,Service服務(wù)組件(可以有多個同時存在),Connector(連接器)、Container(容器服務(wù)),其他組件:Jasper(Jasper解析)、Naming(命名服務(wù))、Session(會話管理)、Logging(日志管理)、JMX(Java 管理器擴展服務(wù)

    2024年01月24日
    瀏覽(90)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包