女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)分布式鎖

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-08 16:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 前言

分布式應(yīng)用中,有時(shí)我們需要一個(gè)方法在同一時(shí)間只能被一個(gè)線程執(zhí)行。此時(shí)我們有可能會(huì)使用到分布式鎖。

分布式鎖需要具備以下特征:

  • 互斥性 同一時(shí)刻鎖只能被一個(gè)線程持有。
  • 超時(shí)釋放 超時(shí)釋放主要是用來(lái)避免死鎖,防止不必要的線程等待和資源浪費(fèi)
  • 可重入性 一個(gè)線程在持有鎖的情況下,可以再次請(qǐng)求加鎖
  • 高性能,高可用 加鎖釋放鎖的操作盡量使用更少的資源,提高性能。同時(shí)也要保證高可用,防止分布式鎖意外失效

目前比較多的分布式鎖有下面的方案:

  • 基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)分布式鎖
  • 基于緩存(redis, Hazelcast)等實(shí)現(xiàn)分布式鎖
  • 基于Zookeeper實(shí)現(xiàn)分布式鎖

2. 數(shù)據(jù)庫(kù)分布式鎖

2.1基于表記錄的分布式鎖

在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)鎖表,并且在需要的字段上創(chuàng)建唯一索引,使用鎖的時(shí)候就插入數(shù)據(jù),插入成功則獲得鎖,執(zhí)行結(jié)束后,就刪除數(shù)據(jù)。也可以加上version控制,使之成為樂觀鎖。

  • 獲取鎖:成功插入數(shù)據(jù)
  • 執(zhí)行業(yè)務(wù)邏輯
  • 釋放鎖:刪除數(shù)據(jù)

2.2基于數(shù)據(jù)庫(kù)行鎖的分布式鎖

使用select * For update來(lái)獲取數(shù)據(jù)庫(kù)數(shù)據(jù)鎖, where之后的條件加入唯一索引,則表示使用了行鎖。其分布式鎖使用順序如下。

  • 獲取鎖:SELECT * FROM database_lock WHERE id = 1 FOR UPDATE;。
  • 執(zhí)行業(yè)務(wù)邏輯。
  • 釋放鎖:COMMIT。

3 Zookeeper分布式鎖

Zookeepe可以實(shí)現(xiàn)分布式鎖主要是因?yàn)槎鄠€(gè)線程去Zookpeeper中創(chuàng)建同一個(gè)節(jié)點(diǎn)時(shí),只有一個(gè)線程可以創(chuàng)建成功。

Zookeeper中有臨時(shí)節(jié)點(diǎn),持久化節(jié)點(diǎn)。其中臨時(shí)節(jié)點(diǎn)在服務(wù)端session失效后,節(jié)點(diǎn)就會(huì)被刪除。相對(duì)而言,持久化節(jié)點(diǎn)在服務(wù)端session失效后,也不會(huì)被刪除,而是需要客戶端主動(dòng)刪除。

在上述類型系節(jié)點(diǎn)之后增加一個(gè)數(shù)字后綴,即路徑+數(shù)字后綴,這樣可以保證其唯一性和有序性。

其分布式鎖實(shí)現(xiàn)原理如下:

  • 創(chuàng)建一個(gè)lock目錄給分布式鎖使用
  • 某個(gè)線程想要獲取鎖就在此目錄下創(chuàng)建臨時(shí)順序節(jié)點(diǎn)
  • 獲取此目錄下的所有子節(jié)點(diǎn),然后查找比自己序號(hào)小的節(jié)點(diǎn),如果不存在,則當(dāng)前線程創(chuàng)建的節(jié)點(diǎn)是最小節(jié)點(diǎn),此時(shí)獲得鎖。
  • 其他線程想要獲取鎖,同樣是創(chuàng)建臨時(shí)有序節(jié)點(diǎn),如果是最小序號(hào)節(jié)點(diǎn)則獲得鎖,否則監(jiān)聽比自己小的次小節(jié)點(diǎn)。
  • 持有分布式鎖的線程操作完成之后,刪除自己的臨時(shí)節(jié)點(diǎn),次大節(jié)點(diǎn)監(jiān)聽到變更事件之后,判斷自己是最小序號(hào)節(jié)點(diǎn)的話,則獲得鎖。

Zookeeper實(shí)現(xiàn)分布式鎖具有高可用,可重入,阻塞等特點(diǎn),由于臨時(shí)節(jié)點(diǎn)在客戶端斷開的時(shí)候就會(huì)被自動(dòng)刪除,所以不用擔(dān)心死鎖問題。但是頻繁刪除和創(chuàng)建節(jié)點(diǎn),性能上會(huì)比Redis分布式鎖低。

4 Redis分布式鎖

4.1 SETNX

setnx命令只會(huì)在key不存在的情況下將key設(shè)置為value值, 其中key和 value值均可以設(shè)置成和業(yè)務(wù)相關(guān)的的命名。但是不滿足超時(shí)釋放的要求。

如果使用expire設(shè)置過(guò)期時(shí)間,也有可能在setnx成功后,由于各種原因,expire沒有執(zhí)行成功,從而導(dǎo)致鎖不能超時(shí)釋放。

4.2 SETNX 擴(kuò)展命令

set key value [EX seconds] [PX milliseconds] [NX|XX]
 #EX 設(shè)置過(guò)期時(shí)間,單位為秒  set lock VALUE EX 10
 #PX 設(shè)置過(guò)期時(shí)間,單位為毫秒 set lock VALUE PX 10000
 #NX key不存在時(shí)才設(shè)置key的值  set lock VALUE EX 10 NX
 #XX key存在時(shí)才設(shè)置key SET lock VALUE EX 10 XX

set 擴(kuò)展命令可以完全取代 SETNX, SETEX, PSETEX 等功能。

可以使用set擴(kuò)展功能完成設(shè)置過(guò)期時(shí)間, 并且是原子操作。

上述分布式鎖也有一些問題:

  • 如果線程獲取鎖之后,執(zhí)行時(shí)間過(guò)長(zhǎng),鎖提前釋放。
  • 如果線程A未執(zhí)行完操作,鎖超時(shí)釋放,此時(shí)線程B又獲取了鎖。線程B持有鎖,但是A線程有可能執(zhí)行DEL操作釋放鎖。

需要避免在長(zhǎng)時(shí)間執(zhí)行的任務(wù)中使用上述分布式鎖,而且未按時(shí)執(zhí)行完的線程不影響其最終結(jié)果。另外可以在鎖的value設(shè)置一些唯一值,刪除key之前驗(yàn)證是否持有鎖。并且驗(yàn)證和刪除需要使用Lua腳本保證其刪除操作的原子性。

上述分布式鎖還需要解決一個(gè)可重入性的問題。

4.3 Redisson 分布式鎖

Redisson是基于Redis的Java內(nèi)存數(shù)據(jù)網(wǎng)格,充分利用了Redis鍵值數(shù)據(jù)庫(kù)提供的一系列優(yōu)勢(shì)。同時(shí)提供功能豐富的分布式鎖。

Resisson內(nèi)部會(huì)有一個(gè)監(jiān)控鎖的守護(hù)線程,在redisson實(shí)例被關(guān)閉前,不斷延長(zhǎng)鎖的有效期。并且可以自定義超時(shí)檢查時(shí)間間隔,同時(shí)還可以指定加鎖時(shí)間。另外還支持公平鎖(Fair Lock),聯(lián)鎖(MultiLock),紅鎖(RedLock),讀寫鎖(ReadWriteLock)以及RSemaphore和RCountDownLatch等類似Java提供的各種多線程工具等。

其中RedLock是基于多個(gè)Redis集群關(guān)聯(lián)的鎖,可以大大提高鎖的可用性及安全性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7250

    瀏覽量

    91488
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3907

    瀏覽量

    65938
  • 分布式
    +關(guān)注

    關(guān)注

    1

    文章

    989

    瀏覽量

    75256
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20126
  • 服務(wù)端
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    7205
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    分布式軟件系統(tǒng)

    降到最低。負(fù)載在各處理機(jī)之間分擔(dān),可以避免臨界瓶頸。 4、當(dāng)現(xiàn)有機(jī)構(gòu)中已存在幾個(gè)數(shù)據(jù)庫(kù)系統(tǒng),而且實(shí)現(xiàn)全局應(yīng)用的必要性增加時(shí),就可以由這些數(shù)據(jù)庫(kù)自下而上構(gòu)成分布式數(shù)據(jù)庫(kù)系統(tǒng)。 5、相等規(guī)
    發(fā)表于 07-22 14:53

    小白求教:labview連接分布式數(shù)據(jù)庫(kù)

    我用Hadoop搭建了一個(gè)分布式數(shù)據(jù)庫(kù),想讓labview作為client向數(shù)據(jù)庫(kù)中寫數(shù)據(jù),應(yīng)該怎么實(shí)現(xiàn)
    發(fā)表于 12-13 10:18

    分布式數(shù)據(jù)庫(kù)有什么優(yōu)缺點(diǎn)?

    分布式數(shù)據(jù)庫(kù)系統(tǒng)(DDBS)是數(shù)據(jù)庫(kù)技術(shù)和網(wǎng)絡(luò)技術(shù)兩者相互滲透和有機(jī)結(jié)合的結(jié)果。涉及數(shù)據(jù)庫(kù)基本理論和網(wǎng)絡(luò)通信理論。分布式數(shù)據(jù)庫(kù)由一組數(shù)據(jù)組成
    發(fā)表于 09-24 09:13

    HarmonyOS分布式數(shù)據(jù)庫(kù),為啥這么牛?

    和維護(hù),這個(gè)對(duì)于應(yīng)用開發(fā)是非常友好的。 HarmonyOS 系統(tǒng)級(jí)的數(shù)據(jù)庫(kù)同步,讓開發(fā)者省去了同步管理、數(shù)據(jù)收發(fā)控制、數(shù)據(jù)一致性解決等問題的解決,讓開發(fā)者能夠更迅速的
    發(fā)表于 11-19 15:38

    【木棉花】分布式數(shù)據(jù)庫(kù)

    同步,為用戶提供在多種終端設(shè)備上一致的數(shù)據(jù)訪問體驗(yàn)。” 那通俗易懂的來(lái)講就是分布式數(shù)據(jù)庫(kù)除了可以存儲(chǔ)數(shù)據(jù),還是可以讓多臺(tái)設(shè)備共用一個(gè)數(shù)據(jù)庫(kù),它和輕量級(jí)偏好
    發(fā)表于 09-05 10:43

    分布式數(shù)據(jù)庫(kù),什么是分布式數(shù)據(jù)庫(kù)

    分布式數(shù)據(jù)庫(kù),什么是分布式數(shù)據(jù)庫(kù) 分布式數(shù)據(jù)庫(kù)系統(tǒng)是在集中式數(shù)據(jù)庫(kù)系統(tǒng)成熟技術(shù)的基礎(chǔ)上發(fā)展起來(lái)的,但不是簡(jiǎn)單地把集中式數(shù)
    發(fā)表于 03-18 15:25 ?3994次閱讀

    分布式數(shù)據(jù)庫(kù)控制協(xié)調(diào)體系結(jié)構(gòu)的研究與實(shí)現(xiàn)

    分布式數(shù)據(jù)庫(kù)控制協(xié)調(diào)體系結(jié)構(gòu)的研究與實(shí)現(xiàn)_李海榮
    發(fā)表于 01-07 20:43 ?0次下載

    Redis 分布式的正確實(shí)現(xiàn)方式

    分布式一般有三種實(shí)現(xiàn)方式:1. 數(shù)據(jù)庫(kù)樂觀;2. 基于Redis的分布式
    的頭像 發(fā)表于 05-31 14:19 ?3788次閱讀

    為什么我們需要分布式數(shù)據(jù)庫(kù)

    to be database systems.)” 數(shù)據(jù)庫(kù)系統(tǒng)經(jīng)過(guò)幾十年演進(jìn)后,分布式數(shù)據(jù)庫(kù)在近幾年發(fā)展如火如荼,國(guó)內(nèi)外出現(xiàn)了很多分布式數(shù)據(jù)庫(kù)創(chuàng)業(yè)公司,為什么分布式數(shù)據(jù)庫(kù)開始流行?在
    的頭像 發(fā)表于 09-06 10:37 ?2775次閱讀

    數(shù)據(jù)庫(kù)如何走向分布式

    to be database systems.)” 數(shù)據(jù)庫(kù)系統(tǒng)經(jīng)過(guò)幾十年演進(jìn)后,分布式數(shù)據(jù)庫(kù)在近幾年發(fā)展如火如荼,國(guó)內(nèi)外出現(xiàn)了很多分布式數(shù)據(jù)庫(kù)創(chuàng)業(yè)公司,為什么分布式數(shù)據(jù)庫(kù)開始流行?在
    的頭像 發(fā)表于 09-24 14:25 ?4164次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>如何走向<b class='flag-5'>分布式</b>

    **分布式數(shù)據(jù)庫(kù)|數(shù)據(jù)庫(kù)數(shù)據(jù)類型**

    分布式數(shù)據(jù)庫(kù)是一種存儲(chǔ)在不同物理位置的數(shù)據(jù)庫(kù)。與單個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的并行系統(tǒng)不同,分布式數(shù)據(jù)庫(kù)系統(tǒng)由不共享物理組件的松耦合站組成。分布式數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 07-17 13:33 ?803次閱讀

    深入理解redis分布式

    系統(tǒng)不同進(jìn)程共同訪問共享資源的一種實(shí)現(xiàn)。如果不同的系統(tǒng)或同一個(gè)系統(tǒng)的不同主機(jī)之間共享了某個(gè)臨界資源,往往需要互斥來(lái)防止彼此干擾,以保證一致性。 業(yè)界流行的分布式
    的頭像 發(fā)表于 10-08 14:13 ?1250次閱讀
    深入理解redis<b class='flag-5'>分布式</b><b class='flag-5'>鎖</b>

    tldb提供分布式使用方法

    前言:分布式分布式系統(tǒng)中一個(gè)極為重要的工具。目前有多種分布式的設(shè)計(jì)方案,比如借助 redis,mq,
    的頭像 發(fā)表于 11-02 14:44 ?1211次閱讀
    tldb提供<b class='flag-5'>分布式</b><b class='flag-5'>鎖</b>使用方法

    分布式的三種實(shí)現(xiàn)方式

    ,下面將分別介紹三種常見的實(shí)現(xiàn)方式。 一、基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)分布式分布式系統(tǒng)中,
    的頭像 發(fā)表于 12-28 10:01 ?1232次閱讀

    分布式云化數(shù)據(jù)庫(kù)有哪些類型

    分布式云化數(shù)據(jù)庫(kù)有哪些類型?分布式云化數(shù)據(jù)庫(kù)主要類型包括:關(guān)系型分布式數(shù)據(jù)庫(kù)、非關(guān)系型分布式數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 01-15 09:43 ?438次閱讀
    主站蜘蛛池模板: 天祝| 嘉黎县| 麦盖提县| 葫芦岛市| 宣武区| 历史| 酉阳| 游戏| 监利县| 玉环县| 湖北省| 偃师市| 大新县| 德惠市| 铜陵市| 许昌市| 北碚区| 惠州市| 易门县| 罗山县| 武汉市| 承德县| 景谷| 白水县| 昭觉县| 商水县| 溧阳市| 新民市| 辽阳市| 微博| 进贤县| 彩票| 衢州市| 清水河县| 托里县| 横峰县| 曲阳县| 拉萨市| 潍坊市| 民乐县| 肥东县|