国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

面試問了分布式鎖,你會答嗎?

數據庫 其他數據庫
在數據庫中創建一個鎖表,并且在需要的字段上創建唯一索引,使用鎖的時候就插入數據,插入成功則獲得鎖,執行結束后,就刪除數據。也可以加上version控制,使之成為樂觀鎖。

哈嘍,大家好,我是指北君。

分布式鎖在很多面試中都會提及,那么我們到底要不要了解呢?

1. 前言

分布式應用中,有時我們需要一個方法在同一時間只能被一個線程執行。此時我們有可能會使用到分布式鎖。

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

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

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

  • 基于數據庫實現分布式鎖
  • 基于緩存(redis, Hazelcast)等實現分布式鎖
  • 基于Zookeeper實現分布式鎖

2. 數據庫分布式鎖

2.1基于表記錄的分布式鎖

在數據庫中創建一個鎖表,并且在需要的字段上創建唯一索引,使用鎖的時候就插入數據,插入成功則獲得鎖,執行結束后,就刪除數據。也可以加上version控制,使之成為樂觀鎖。

  • 獲取鎖:成功插入數據
  • 執行業務邏輯
  • 釋放鎖:刪除數據

2.2基于數據庫行鎖的分布式鎖

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

  • 獲取鎖:SELECT * FROM database_lock WHERE id = 1 FOR UPDATE;。
  • 執行業務邏輯。
  • 釋放鎖:COMMIT。

3.Zookeeper分布式鎖

Zookeepe可以實現分布式鎖主要是因為多個線程去Zookpeeper中創建同一個節點時,只有一個線程可以創建成功。

Zookeeper中有臨時節點,持久化節點。其中臨時節點在服務端session失效后,節點就會被刪除。相對而言,持久化節點在服務端session失效后,也不會被刪除,而是需要客戶端主動刪除。

在上述類型系節點之后增加一個數字后綴,即路徑+數字后綴,這樣可以保證其唯一性和有序性。

其分布式鎖實現原理如下:

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

Zookeeper實現分布式鎖具有高可用,可重入,阻塞等特點,由于臨時節點在客戶端斷開的時候就會被自動刪除,所以不用擔心死鎖問題。但是頻繁刪除和創建節點,性能上會比Redis分布式鎖低。

4 Redis分布式鎖

4.1 SETNX

setnx命令只會在key不存在的情況下將key設置為value值, 其中key和 value值均可以設置成和業務相關的的命名。但是不滿足超時釋放的要求。

如果使用expire設置過期時間,也有可能在setnx成功后,由于各種原因,expire沒有執行成功,從而導致鎖不能超時釋放。

4.2 SETNX 擴展命令

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

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

可以使用set擴展功能完成設置過期時間, 并且是原子操作。

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

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

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

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

4.3 Redisson 分布式鎖

Redisson是基于Redis的Java內存數據網格,充分利用了Redis鍵值數據庫提供的一系列優勢。同時提供功能豐富的分布式鎖。

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

其中RedLock是基于多個Redis集群關聯的鎖,可以大大提高鎖的可用性及安全性。

關于Redisson,我們后續的文章會繼續講到,盡請期待!

分布式應用中,有時我們需要一個方法在同一時間只能被一個線程執行。此時我們有可能會使用到分布式鎖。?

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2023-11-10 08:44:13

分布式鎖分布式系統

2022-05-18 10:38:51

Redis分布式鎖數據

2024-01-09 08:20:05

2021-10-09 11:34:59

MySQL分布式鎖庫存

2023-01-12 08:24:45

ZookeeperZK服務器

2019-06-19 15:40:06

分布式鎖RedisJava

2016-11-02 12:06:27

分布式系統大數據

2021-07-26 11:09:46

Redis分布式技術

2018-07-17 08:14:22

分布式分布式鎖方位

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2021-07-16 07:57:34

ZooKeeperCurator源碼

2022-08-04 08:45:50

Redisson分布式鎖工具

2018-11-27 16:17:13

分布式Tomcat

2021-11-26 06:43:19

Java分布式

2024-04-26 08:06:58

分布式系統

2020-03-12 10:06:32

Redis分布式鎖兩種

2024-09-24 16:30:46

分布式鎖Redis數據中間件

2025-07-22 01:33:00

分布式Zookeeper

2022-08-11 18:27:50

面試Redis分布式鎖

2019-05-28 08:56:40

PythonCPUThread
點贊
收藏

51CTO技術棧公眾號

天天干天天综合| 岛国大片在线观看| 欧美丝袜一区| 色偷偷噜噜噜亚洲男人的天堂| 18av在线视频| 欧美性色欧美a在线播放| 男女性激情视频在线观看| 国产欧美一区二区精品忘忧草| 日韩在线视频在线| 麻豆精品久久精品色综合| 久久免费看av| 亚洲在线电影| 国产精品白丝jk白祙| 欧美区亚洲区| 国严精品久久久久久亚洲影视| 在线中文字幕第一区| 成人免费福利在线| 欧美一区不卡| 国产精品久久久久久免费观看| 亚洲精品一区二区在线看| 国产精品视频自拍| 国产精品久久久久一区二区三区厕所 | 成人免费视频77777| 久久噜噜亚洲综合| 麻豆av免费在线| 中文字幕不卡在线播放| 九色成人在线| 亚洲一区二区av电影| 最新在线观看av| 欧美在线视频你懂得| 日本www在线观看| 亚洲国内精品在线| 久久精品黄色| 69久久夜色精品国产7777| 欧美在线关看| 91老司机精品视频| 亚洲久久视频| 国产资源第一页| 久久亚洲影视婷婷| 色老板视频在线观看| 色婷婷综合久色| 免费电影网站在线视频观看福利| 在线电影欧美日韩一区二区私密| 一区二区三区视频播放| 国产欧美精品日韩| 日韩在线a电影| 欧美 日韩 激情| 国产精品第13页| 91短视频版在线观看www免费| 亚洲国产精品电影| 欧美三级电影网址| 国产日韩欧美日韩大片| 亚洲一区日本| 成人观看免费完整观看| 亚洲成人第一页| 好吊日av在线| 国内精品美女av在线播放| 欧美精品播放| 欧美一区二区激情| 亚洲日本一区二区三区| 成人av黄色| 蜜月aⅴ免费一区二区三区| 99久久久久久中文字幕一区| 一区二区三区在线视频111 | 蜜桃视频在线观看91| av亚洲产国偷v产偷v自拍| 黄色高清在线观看| 精品99999| 激情五月色综合国产精品| 色一情一乱一伦一区二区三区丨| 国产拍揄自揄精品视频麻豆| 一区二区三区视频在线观看视频| 中文日韩在线视频| 一区二区电影| 黄色片久久久久| 777奇米四色成人影色区| 国语精品视频| 亚洲第一导航| 欧美日韩精品在线播放| yy6080久久伦理一区二区| 99re国产视频| 久久九九影视网| 99视频免费在线观看| 全球成人中文在线| 国产91精品在线观看| 一区二区三区视频在线观看视频| 欧美激情国产精品| 免费观看成人av| 在线中文字幕观看| 久久久久久久成人| 国产在线不卡一区| 天堂地址在线www| 国产精品成人v| www.成人在线| www555久久| av一区二区三区在线观看| 国产欧美日韩中文久久| 欧美三级网站| 欧美二区在线看| 性做久久久久久免费观看| 97久久综合区小说区图片区| 青青青在线观看视频| 日韩一区二区三区高清免费看看| 成人aaaa| 另类图片亚洲色图| 在线观看日韩av| 另类成人小视频在线| 1769在线观看| 99久re热视频这里只有精品6| 亚洲人成影院在线观看| 日本精品一区二区三区在线观看视频| 在线精品日韩| 欧美精品一区二区蜜臀亚洲| 亚洲视频播放| 日本蜜桃在线观看| 国产精华一区二区三区| 欧美午夜无遮挡| 国内黄色精品| 97干com| 色中色综合影院手机版在线观看| av在线一区二区三区| 国产精品99精品一区二区三区∴| 成年人三级视频| 亚洲毛片在线观看.| 狠狠狠色丁香婷婷综合久久五月| 色呦呦在线视频| 神马影院我不卡| 日韩美女在线视频| 麻豆国产精品视频| 2020日本在线视频中文字幕| 亚洲人成影视在线观看| 欧美精品一区二区蜜臀亚洲| 蜜臀av一区二区在线观看| 狠狠操一区二区三区| 2022中文字幕| 久久久www成人免费精品| www久久精品| 好吊妞国产欧美日韩免费观看网站| 日本成人免费网站| 国产精品日韩专区| 欧美中文一区二区三区| 日韩国产精品久久久久久亚洲| 18videosex性欧美麻豆| 四虎影院一区二区三区| 亚洲精品动漫100p| 国产精品99久| 国产精品1区在线| 99re热在线观看| 成人在线小视频| 欧美电影免费观看完整版| 激情综合色播激情啊| av在线国产精品| 色偷偷免费视频| 美国av一区二区三区| 亚洲色图在线观看| 国产香蕉久久精品综合网| 国产亚洲精品美女久久久久久久久久| 中国动漫在线观看完整版免费| 成人免费91在线看| 亚洲第一级黄色片| 久久天堂av综合合色蜜桃网| 国产成人三级| 日本免费视频在线观看| 天天综合五月天| 2020欧美日韩在线视频| 色婷婷av一区| 国产最新精品免费| 亚洲bt欧美bt精品777| 成年人视频网站在线| www.国产二区| 日韩免费视频在线观看| 欧美电影在线免费观看| av在线不卡观看免费观看| 日韩综合在线| 国产直播在线| 丝袜足控免费网站xx网站| 日韩欧美99| 78色国产精品| 欧美日韩亚洲国产综合| 91欧美一区二区| 欧美日韩hd| 看片一区二区| 一本一道dvd在线观看免费视频| 日本精品一区二区| 91精品国产色综合| 日韩一区二区三区电影| 中文字幕免费观看一区| 中日韩视频在线观看| 91综合久久爱com| 色综合久久影院| 国产三级三级三级看三级| 国产精品免费区二区三区观看| 精品国产一区二区三区四区在线观看| 精品国产福利在线| 成人午夜av电影| 欧美成人高清| 久久综合偷偷噜噜噜色| 中文av资源在线| 中文在线有码| 国产男女激情视频|