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

[框架系列]-[通用lock框架] 介紹

這篇具有很好參考價(jià)值的文章主要介紹了[框架系列]-[通用lock框架] 介紹。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一:簡(jiǎn)介

二:框架優(yōu)點(diǎn)

1.統(tǒng)一的調(diào)用api

2.統(tǒng)一的lock句柄獲取api

3.多廠商實(shí)現(xiàn)切換

4.多廠商不同類(lèi)型lock同時(shí)使用

5.多廠商實(shí)現(xiàn)擴(kuò)展

6.lock增強(qiáng)

(1)本地lock預(yù)鎖

(2)事務(wù)感知

7.注解式lock支持

(1)提供的lock注解

(2)業(yè)務(wù)策略及自定義策略

8.方法級(jí)定制以及全局定制能力


一:簡(jiǎn)介

lock框架是解決java lock領(lǐng)域的一種通用框架,基于spring boot框架starter集成機(jī)制,可以通過(guò)簡(jiǎn)單的依賴(lài)配置,快速實(shí)現(xiàn)集成,此篇主要介紹設(shè)計(jì)思路,不關(guān)心的直接具體見(jiàn)通用lock框架集成及具體配置使用-CSDN博客

二:框架優(yōu)點(diǎn)

1.統(tǒng)一的調(diào)用api

基于java 的Lock接口作為標(biāo)準(zhǔn),可以使用本地的ReentantLock,ReentrantReadWriteLock.WriteLock以及Redission相關(guān)的RedissonLock,RedissonReadLock 等接口的實(shí)現(xiàn)

public?interface?Lock {

????void?lock();

?????

????void?lockInterruptibly()?throws?InterruptedException;

?????

????boolean?tryLock();

?????

????boolean?tryLock(long?time, TimeUnit unit)?throws?InterruptedException;

???

????void?unlock();

???

????Condition newCondition();

}

2.統(tǒng)一的lock句柄獲取api

基于Spring的LockRegistry標(biāo)準(zhǔn),可以使用包括Spring自帶的RedisLockRegistry以及其他實(shí)現(xiàn)此標(biāo)準(zhǔn)的LockRegistry

@FunctionalInterface

public?interface?LockRegistry {

????/**

?????* Obtains the lock associated with the parameter object.

?????* @param lockKey The object with which the lock is associated.

?????* @return The associated lock.

?????*/

????Lock obtain(Object lockKey);

}

LockRegistry obtain返回的Lock為java的Lock標(biāo)準(zhǔn)

3.多廠商實(shí)現(xiàn)切換

標(biāo)準(zhǔn)的高度統(tǒng)一,為靈活的切換不同的lock實(shí)現(xiàn)提供的支持??蚣茴A(yù)置了如下實(shí)現(xiàn)類(lèi)型的定義

/**

????* lock實(shí)現(xiàn)廠商類(lèi)型

????*/

???public?enum?LockImplementer {

???????/**

????????* 本地JVM實(shí)現(xiàn)

????????*/

???????JVM,

???????/**

????????* redis實(shí)現(xiàn)

????????*/

???????REDIS,

???????/**

????????* zookeeper實(shí)現(xiàn)

????????*/

???????ZOOKEEPER,

???????/**

????????* etcd實(shí)現(xiàn)

????????*/

???????ETCD,

???????/**

????????* mysql實(shí)現(xiàn)

????????*/

???????MYSQL,

???????;

???}

其中本地實(shí)現(xiàn)以及redission實(shí)現(xiàn)框架已經(jīng)支持

4.多廠商不同類(lèi)型lock同時(shí)使用

/**

?* Created by suyouliang

?* Content :鎖類(lèi)型

?*/

public?enum?LockType {

????/**

?????* 可重入鎖

?????*/

????Reentrant("reentrant"),

????/**

?????* 公平鎖

?????*/

????Fair("fair"),

????/**

?????* 讀鎖

?????*/

????Read("read"),

????/**

?????* 寫(xiě)鎖

?????*/

????Write("write"),

????/**

?????* 自旋鎖

?????*/

????Spin("spin"),

????;

}

配置類(lèi)型

配置名

作用域

LockImplementer
implementer
全局及注解
LockType
lockType
注解
5.多廠商實(shí)現(xiàn)擴(kuò)展

框架允許基于Spring的標(biāo)準(zhǔn)LockRegistry擴(kuò)展自定義的LockRegistry實(shí)現(xiàn),當(dāng)然Lock同樣可以,通用Lock框架也基于這兩個(gè)標(biāo)準(zhǔn)進(jìn)行擴(kuò)展的,并定義了本框架的擴(kuò)展標(biāo)準(zhǔn),實(shí)現(xiàn)一下以下接口后,僅需通過(guò)少量配置即直接可在框架中生效,而無(wú)需更改邏輯調(diào)用代碼

public?interface?LockRegistryFactory {

????LockRegistry getLockRegistry(LockConfig.LockImplementer lockImplementer,?boolean?supportTransaction,?boolean?withLocalCache);

????LockFactory getLockFactory(LockConfig.LockImplementer lockImplementer,?boolean?supportTransaction,?boolean?withLocalCache);

}

public?interface?LockFactory {

????Lock getLock(String type, String lockKey);

????LockScopeType getScopeType();

}

6.lock增強(qiáng)

在java Lock定義的能力之外,框架提供了兩個(gè)增強(qiáng)能力

(1)本地lock預(yù)鎖

lock的上鎖會(huì)先在本地進(jìn)行預(yù)上鎖,本地上鎖成功才會(huì)真正調(diào)用實(shí)際的分布式鎖。如果本地失敗則直接快速失敗

(2)事務(wù)感知

基于注解事務(wù),內(nèi)部使用lock可能會(huì)發(fā)生鎖釋放了但是當(dāng)前事務(wù)還沒(méi)提交的情況,此時(shí)lock將會(huì)失效。lock框架可感知上下文的事務(wù),并提供了此情況發(fā)生時(shí)相應(yīng)的策略

**

?* 當(dāng)lock存在于事務(wù)上下文中的策略

?*/

public?enum?LockTransactionStrategy {

????/**

?????* 生效,打warming日志(僅開(kāi)啟supportTransaction生效)

?????*/

????WARMING,

????/**

?????* 禁止,會(huì)拋異常阻斷業(yè)務(wù)邏輯(僅開(kāi)啟supportTransaction生效)

?????*/

????FORBIDDEN,

????/**

?????* 僅開(kāi)啟supportTransaction生效,

?????* 保證多線程訪問(wèn)安全,unlock會(huì)在事務(wù)完成后再提交。

?????* 缺點(diǎn):會(huì)使lock的作用域膨脹。直至上下文事務(wù)完成

?????*/

????THREAD_SAFE;

}

開(kāi)發(fā)者可以根據(jù)自己的業(yè)務(wù)需要使用。本地緩存及事務(wù)感知能力同樣可作用于自定義的lock(基于包裝實(shí)現(xiàn))

7.注解式lock支持

框架實(shí)現(xiàn)了基于注解式的lock支持

(1)提供的lock注解

注解

簡(jiǎn)介

其他

@FailFastLock 快速失敗的lock
@LocalLock JVM實(shí)現(xiàn)的lock
@Lock 頂層lock注解,支持所有策略及配置參數(shù)

@FailFastLock 和@LocalLock都是基于@Lock實(shí)現(xiàn)的,擴(kuò)展注解主要是為了更好的語(yǔ)義以及使用體驗(yàn),而無(wú)需指定多余的配置。比如@FailFastLock 就不用配置等待時(shí)間,因?yàn)榈却龝r(shí)間是0

@Target(value = {ElementType.METHOD})

@Retention(value = RetentionPolicy.RUNTIME)

@Documented

public?@interface?FailFastLock {

????/**

?????* 鎖的名稱(chēng)

?????*

?????* @return name

?????*/

????String name()?default?"";

????/**

?????* 自定義業(yè)務(wù)key

?????*

?????* @return keys

?????*/

????String[] keys()?default?{};

}

(2)業(yè)務(wù)策略及自定義策略

lock從獲取句柄,到加鎖并執(zhí)行邏輯代碼,最后解鎖這個(gè)過(guò)程可能出現(xiàn)各種異常情況,注解提供了對(duì)于以上情況的處理能力

備注:當(dāng)作用域?yàn)槿旨白⒔鈺r(shí),注解的優(yōu)先級(jí)高于全局的設(shè)置

策略點(diǎn)

策略名

可選作用域

具體策略

加鎖失敗的處理策略
lockFailStrategy
全局及注解

1.NO_OPERATION:繼續(xù)執(zhí)行業(yè)務(wù)邏輯,不做任何處理

2.FAIL_FAST:快速失敗

3.KEEP_ACQUIRE:一直阻塞,直到獲得鎖,在太多的嘗試后,仍會(huì)報(bào)錯(cuò)

4.CUSTOMER: 自定義,用于全局默認(rèn)處理

定制的加鎖失敗的處理策略 customLockFailStrategy 注解 用戶指定,格式為方法的全限定名稱(chēng)
加鎖異常的處理策略
lockExceptionStrategy
全局及注解

1.THROW_EXCEPTION:拋出異常

2.CUSTOMER:自定義,用于全局默認(rèn)處理

釋放鎖時(shí)報(bào)錯(cuò)的處理策略
releaseTimeoutStrategy
全局及注解

1.NO_OPERATION:繼續(xù)執(zhí)行業(yè)務(wù)邏輯,不做任何處理

2.FAIL_FAST:快速失敗,可自定義異常類(lèi)及報(bào)錯(cuò)信息

3.CUSTOMER: 自定義,用于全局默認(rèn)處理

自定義釋放鎖時(shí)已超時(shí)的處理策略
customReleaseTimeout
Strategy
全局及注解

用戶指定,格式為方法的全限定名稱(chēng)

獲取鎖失敗時(shí),報(bào)錯(cuò)的異常類(lèi)型 無(wú) 全局及注解 按照用戶指定異常類(lèi)型報(bào)錯(cuò)
獲取鎖失敗時(shí),報(bào)錯(cuò)的錯(cuò)誤信息 無(wú) 全局及注解 按照用戶指定異常信息報(bào)錯(cuò)
8.方法級(jí)定制以及全局定制能力

框架設(shè)計(jì)時(shí)考慮到用戶的自定義需求,提供了方法級(jí)定制以及全局定制的能力,以上的策略中,lockFailStrategy,lockExceptionStrategy,releaseTimeoutStrategy 都提供了CUSTOMER的的策略,框架通過(guò)java的SPI機(jī)制,將對(duì)應(yīng)的用戶自實(shí)現(xiàn)的策略加載

策略點(diǎn)

策略名

具體配置名

擴(kuò)展定義接口

加鎖失敗的處理策略 lockFailStrategy CUSTOMER cn.techwolf.blue.usl.framework.lock.handler.lock.ExceptionOnLockCustomerHandler
加鎖異常的處理策略 lockExceptionStrategy CUSTOMER cn.techwolf.blue.usl.framework.lock.handler.lock.FailOnLockCustomerHandler
加鎖釋放鎖異常的處理策略 releaseTimeoutStrategy CUSTOMER cn.techwolf.blue.usl.framework.lock.handler.release.ReleaseTimeoutCustomerHandler

自定義處理策略加載后,如果需要指定為全局,需要在全局配置中指定定位的策略名的配置為CUSTOMER即可開(kāi)啟,方法級(jí)同理

注意:無(wú)論是全局還是注解的方法級(jí),一旦指定以上策略的配置為CUSTOMER,則系統(tǒng)運(yùn)行時(shí)必須存在對(duì)應(yīng)的實(shí)現(xiàn)類(lèi),否則報(bào)錯(cuò)。不同的是,全局級(jí)配置報(bào)錯(cuò)將導(dǎo)致項(xiàng)目無(wú)法啟動(dòng)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-822737.html

到了這里,關(guān)于[框架系列]-[通用lock框架] 介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 工具系列:PyCaret介紹_Fugue 集成_Spark、Dask分布式訓(xùn)練

    工具系列:PyCaret介紹_Fugue 集成_Spark、Dask分布式訓(xùn)練

    Fugue 是一個(gè)低代碼的統(tǒng)一接口,用于不同的計(jì)算框架,如 Spark、Dask。PyCaret 使用 Fugue 來(lái)支持分布式計(jì)算場(chǎng)景。 讓我們從最標(biāo)準(zhǔn)的例子開(kāi)始,代碼與本地版本完全相同,沒(méi)有任何魔法。 compare_model 如果您不想使用分布式系統(tǒng),也完全相同。 現(xiàn)在讓我們將其分布式,作為一個(gè)玩

    2024年02月04日
    瀏覽(27)
  • 開(kāi)源:Taurus.DTC 微服務(wù)分布式事務(wù)框架,支持 .Net 和 .Net Core 雙系列版本

    開(kāi)源:Taurus.DTC 微服務(wù)分布式事務(wù)框架,支持 .Net 和 .Net Core 雙系列版本

    在經(jīng)過(guò)1年多的深思,十幾年的框架編寫(xiě)技術(shù)沉淀下,花了近一個(gè)月的時(shí)間,終于又為 .Net 及 .Net Core 的微服務(wù)系列框架貢獻(xiàn)當(dāng)中的一個(gè)重要組件。 https://github.com/cyq1162/Taurus.DTC ? 由于 CYQ.Data?Orm 組件本身支持10多種數(shù)據(jù)庫(kù),因此提供的包,只根據(jù)消息隊(duì)列的需要分拆提供。 默

    2024年02月02日
    瀏覽(20)
  • 開(kāi)源:Taurus.Idempotent 分布式冪等性鎖框架,支持 .Net 和 .Net Core 雙系列版本

    開(kāi)源:Taurus.Idempotent 分布式冪等性鎖框架,支持 .Net 和 .Net Core 雙系列版本

    分布式冪等性框架的作用是確保在分布式系統(tǒng)中的操作具有冪等性,即無(wú)論操作被重復(fù)執(zhí)行多少次,最終的結(jié)果都是一致的。冪等性是指對(duì)同一操作的多次執(zhí)行所產(chǎn)生的效果與僅執(zhí)行一次的效果相同。 以下是分布式冪等性框架的主要作用: 避免重復(fù)操作: 在分布式系統(tǒng)中,

    2024年03月09日
    瀏覽(27)
  • 通用分布式鎖組件

    通用分布式鎖組件

    自定義注解實(shí)現(xiàn)通用分布式鎖組件。 Redisson官網(wǎng):https://redisson.org/ Redisson是一個(gè)基于Redis的工具包,可以幫助開(kāi)發(fā)人員更輕松地使用Redis,功能非常強(qiáng)大。將JDK中很多常見(jiàn)的隊(duì)列、鎖、對(duì)象都基于Redis實(shí)現(xiàn)了對(duì)應(yīng)的分布式版本并提供高級(jí)的分布式鎖,分布式集合,分布式對(duì)象,

    2024年04月09日
    瀏覽(16)
  • Python爬蟲(chóng)之Scrapy框架系列(23)——分布式爬蟲(chóng)scrapy_redis淺實(shí)戰(zhàn)【XXTop250部分爬取】

    先用單獨(dú)一個(gè)項(xiàng)目來(lái)使用scrapy_redis,講解一些重要點(diǎn)!

    2024年02月16日
    瀏覽(24)
  • 開(kāi)源通用高性能的分布式id序列組件

    開(kāi)源通用高性能的分布式id序列組件

    原文地址:https://ntopic.cn/p/2023062101/ Gitee源代碼倉(cāng)庫(kù):https://gitee.com/obullxl/sequence-jdbc GitHub源代碼倉(cāng)庫(kù):https://github.com/obullxl/sequence-jdbc 業(yè)務(wù)數(shù)據(jù)的存儲(chǔ),少不了數(shù)據(jù)記錄的id序列。 id序列(或稱(chēng)序列)的生成方式有很多種,比如當(dāng)前時(shí)間戳、數(shù)據(jù)庫(kù)的序列值(Oracle的序列,MyS

    2024年02月11日
    瀏覽(30)
  • 分布式服務(wù)框架_Zookeeper--管理分布式環(huán)境中的數(shù)據(jù)

    安裝和配置詳解 本文介紹的 Zookeeper 是以 3.2.2 這個(gè)穩(wěn)定版本為基礎(chǔ),最新的版本可以通過(guò)官網(wǎng) ? http://hadoop.apache.org/zookeeper/ 來(lái)獲取, Zookeeper 的安裝非常簡(jiǎn)單,下面將從單機(jī)模式和集群模式兩個(gè)方面介紹 Zookeeper 的安裝和配置。 單機(jī)模式

    2024年02月12日
    瀏覽(23)
  • SpringSecurity分布式安全框架

    SpringSecurity分布式安全框架

    Spring Security是一個(gè)基于Spring框架的安全框架,它提供了全面的安全解決方案,包括用戶認(rèn)證和用戶授權(quán)等Web應(yīng)用安全性問(wèn)題。Spring Security可以輕松擴(kuò)展以滿足自定義需求,它的真正強(qiáng)大之處在于它可以輕松擴(kuò)展以滿足自定義要求。 對(duì)于分布式系統(tǒng)來(lái)說(shuō),Spring Security可以結(jié)合

    2024年02月08日
    瀏覽(24)
  • 分布式事務(wù)框架Seata

    分布式事務(wù)框架Seata

    分布式事務(wù)框架Seata 一、seata是什么 在微服務(wù)架構(gòu)下,由于數(shù)據(jù)庫(kù)和應(yīng)用服務(wù)的拆分,導(dǎo)致原本一個(gè)事務(wù)單元中的多個(gè) DML 操作,變成了跨進(jìn)程或者跨數(shù)據(jù)庫(kù)的多個(gè)事務(wù)單元的多個(gè) DML 操作, 而傳統(tǒng)的數(shù)據(jù)庫(kù)事務(wù)無(wú)法解決這類(lèi)的問(wèn)題,所以就引出了分布式事務(wù)的概念。 分布式

    2024年02月10日
    瀏覽(23)
  • RPC分布式通信框架

    RPC分布式通信框架

    在實(shí)際開(kāi)發(fā)中單機(jī)服務(wù)器存在諸多問(wèn)題: 1.受限于硬件資源無(wú)法提高并發(fā)量 2.任意模塊的修改都將導(dǎo)致整個(gè)項(xiàng)目代碼重新編譯部署 3.在系統(tǒng)中,有些模塊屬于CPU密集型,有些屬于I/O密集型,各模塊對(duì)于硬件資源的需求不一樣 什么是分布式?分布式是否可以解決以上問(wèn)題? 分

    2024年04月28日
    瀏覽(41)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包