精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:項目中如何實現(xiàn)分布式鎖?

云計算 分布式
基于數(shù)據(jù)庫實現(xiàn)的分布式鎖不適用于高并發(fā)場景,而基于 Zookeeper 實現(xiàn)的分布式鎖又需要額外部署 Zookeeper 服務,增加了運營成本,所以使用 Redis 實現(xiàn)分布式鎖是目前主流的實現(xiàn)方案。

分布式鎖(Distributed Lock)是一種用于分布式系統(tǒng)中的同步機制,主要是為了防止分布式系統(tǒng)中,多個服務實例同時操作一個共享資源所帶來的并發(fā)安全問題。

分布式鎖確保在同一時間只有一個實例操作共享資源,從而保證了數(shù)據(jù)的安全性。

1.分布式鎖實現(xiàn)方案

分布式鎖的實現(xiàn)方案有多種,例如以下這幾種:

  • 基于數(shù)據(jù)庫實現(xiàn)分布式鎖:可以通過數(shù)據(jù)庫的樂觀鎖或悲觀鎖實現(xiàn)分布式鎖,但是由于數(shù)據(jù)庫的 IO 操作比較慢,不適合高并發(fā)場景。
  • 基于 Zookeeper 實現(xiàn)分布式鎖:Zookeeper 是一個高可用性的分布式協(xié)調(diào)服務,可以通過它來實現(xiàn)分布式鎖。但是使用 Zookeeper 需要部署額外的服務,增加了系統(tǒng)復雜度。
  • 基于 Redis 實現(xiàn)分布式鎖:Redis 是一個高性能的內(nèi)存數(shù)據(jù)庫,支持分布式部署,可以通過 Redis 的原子操作實現(xiàn)分布式鎖,而且具有高性能和高可用性。

綜合以上方案來看,基于數(shù)據(jù)庫實現(xiàn)的分布式鎖不適用于高并發(fā)場景,而基于 Zookeeper 實現(xiàn)的分布式鎖又需要額外部署 Zookeeper 服務,增加了運營成本,所以使用 Redis 實現(xiàn)分布式鎖是目前主流的實現(xiàn)方案

2.為什么Redis可以實現(xiàn)分布式鎖?

因為 Redis 作為一個獨立的第三方系統(tǒng)(數(shù)據(jù)中間件),其本身就支持分布式應用。也就是針對于 Redis 的所有操作,所有的分布式系統(tǒng)都是全局可見的,如下圖所示:

圖片圖片

3.Redis如何實現(xiàn)分布式鎖?

使用 Redis 實現(xiàn)分布式鎖的方案有以下 4 種:

  • setnx(set if Not eXists):嘗試設置鍵 key 的值為 value,但如果 key 已經(jīng)存在,則不會執(zhí)行任何操作并返回 0,如果 key 不存在則加鎖成功。

缺陷:存在死鎖問題、鎖誤刪問題、不可重入問題、鎖無法自動續(xù)期問題。

  • set nx ex/px:setnx 升級版本,Redis 2.6 版本后才能支持此語法。嘗試加鎖和設置鎖超時時間,使用案例 set key value nx px 3000。

缺陷:存在鎖誤刪問題、不可重入問題、鎖無法自動續(xù)期問題。

  • Lua 腳本:解決鎖重入的問題

缺陷:實現(xiàn)復雜、且存在鎖無法自動續(xù)期問題。

  • Redisson 框架:基于 Redis 實現(xiàn)分布式鎖的開源框架。其實現(xiàn)簡單、不存在鎖重入和鎖續(xù)期等問題。

問題解釋

  • 死鎖問題:SETNX 如未設置過期時間,鎖忘記刪了或加鎖線程宕機都會導致死鎖,也就是分布式鎖一直被占用的情況。
  • 鎖誤刪問題:SETNX 設置了超時時間,但因為執(zhí)行時間太長,所以在超時時間之內(nèi)鎖已經(jīng)被自動釋放了,但線程不知道,因此在線程執(zhí)行結束之后,會把其他線程的鎖誤刪的問題。
  • 不可重入問題:也就是說同一線程在已經(jīng)獲取了某個鎖的情況下,如果再次請求獲取該鎖,則請求會失敗(因為只有在第一次能加鎖成功)。也就是說,一個線程不能對自己已持有的鎖進行重復鎖定。
  • 無法自動續(xù)期:線程在持有鎖期間,任務未能執(zhí)行完成,鎖可能會因為超時而自動釋放。SETNX 無法自動根據(jù)任務的執(zhí)行情況,設置新的超時實現(xiàn),以延長鎖的時間。

綜合以上實現(xiàn)方案來看,生產(chǎn)級別使用 Redis 實現(xiàn)分布式鎖的方案,應該選用 Redisson 框架

4.Redisson介紹

Redisson 是一個開源的用于操作 Redis 的 Java 框架。與 Jedis 和 Lettuce 等輕量級的 Redis 框架不同,它提供了更高級且功能豐富的 Redis 客戶端。它提供了許多簡化 Redis 操作的高級 API,并支持分布式對象、分布式鎖、分布式集合等特性。

Redisson 官網(wǎng):https://redisson.org/

Redisson 特性說明

  • Redisson 可以設置分布式鎖的過期時間,從而避免鎖一直被占用而導致的死鎖問題。
  • Redisson 在為每個鎖關聯(lián)一個線程 ID 和重入次數(shù)(遞增計數(shù)器)作為分布鎖 value 的一部分存儲在 Redis 中,這樣就避免了鎖誤刪和不可重入的問題。
  • Redisson 還提供了自動續(xù)期的功能,通過定時任務(看門狗)定期延長鎖的有效期,確保在業(yè)務未完成前,鎖不會被其他線程獲取。

5.Redisson實現(xiàn)分布式鎖

1) 添加 Redisson 框架

添加 Redisson 依賴:

<!-- Redisson -->
<!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson-spring-boot-starter</artifactId>
</dependency>

2)配置 Redis 連接信息

將 RedissonClient 對象保存到 Spring Ioc 容器,并為其設置 Redis 服務連接信息,具體實現(xiàn)代碼如下:

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
publicclass RedissonConfig {
    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        // 也可以將 redis 配置信息保存到配置文件
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        return Redisson.create(config);
    }
}

3)創(chuàng)建分布式鎖

Redisson 分布式鎖的操作和 Java 中的 ReentrantLock(可重入鎖)的操作很像,都是先使用 tryLock 嘗試獲取(非公平)鎖,再通過 unlock 釋放鎖,具體實現(xiàn)如下:

import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
@RestController
publicclass LockController {
    @Autowired
    private RedissonClient redissonClient;
    @GetMapping("/lock")
    public String lockResource() throws InterruptedException {
        String lockKey = "myLock";
        // 獲取 RLock 對象
        RLock lock = redissonClient.getLock(lockKey);
        try {
            // 嘗試獲取鎖(嘗試加鎖)(鎖超時時間是 30 秒)
            boolean isLocked = lock.tryLock(30, TimeUnit.SECONDS);
            if (isLocked) {
                // 成功獲取到鎖
                try {
                    // 模擬業(yè)務處理
                    TimeUnit.SECONDS.sleep(5);
                    return"成功獲取鎖,并執(zhí)行業(yè)務代碼";
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    // 釋放鎖
                    lock.unlock();
                }
            } else {
                // 獲取鎖失敗
                return"獲取鎖失敗";
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return"獲取鎖成功";
    }
}

a.實現(xiàn)公平鎖

Redisson 默認創(chuàng)建的分布式鎖是非公平鎖(出于性能的考慮),想要把它變成公平鎖可使用以下代碼實現(xiàn):

RLock lock = redissonClient.getFairLock(lockKey);  // 獲取公平鎖

b.實現(xiàn)讀寫鎖

Redisson 還可以創(chuàng)建讀寫鎖,如下代碼所示:

RReadWriteLock lock = redissonClient.getReadWriteLock(lockKey); // 獲取讀寫鎖
lock.readLock();  // 讀鎖
lock.writeLock(); // 寫鎖

讀寫鎖的特點就是并發(fā)性能高,它是允許多個線程同時獲取讀鎖進行讀操作的,也就是說在沒有寫鎖的情況下,讀取操作可以并發(fā)執(zhí)行,提高了系統(tǒng)的并行度。但寫鎖則是獨占式的,同一時間只有一個線程可以獲得寫鎖,無論是讀還是寫都無法與寫鎖并存,這樣就確保了數(shù)據(jù)修改時的數(shù)據(jù)一致性。

c.實現(xiàn)聯(lián)鎖

Redisson 也支持聯(lián)鎖,也叫分布式多鎖 MultiLock,它允許客戶端一次性獲取多個獨立資源(RLock)上的鎖,這些資源可能是不同的鍵或同一鍵的不同鎖。當所有指定的鎖都被成功獲取后,才會認為整個操作成功鎖定。這樣能夠確保在分布式環(huán)境下進行跨資源的并發(fā)控制。

聯(lián)鎖的實現(xiàn)示例如下:

// 獲取需要加鎖的資源
RLock lock1 = redisson.getLock("lock1");
RLock lock2 = redisson.getLock("lock2");
// 聯(lián)鎖
RedissonMultiLock multiLock = new RedissonMultiLock(lock1, lock2);
try {
    // 一次性嘗試獲取所有鎖
    if (multiLock.tryLock()) {
        // 獲取鎖成功...
    }
} finally {
    // 釋放所有鎖
    multiLock.unlock();
}

課后思考

說說 Redisson 分布式鎖的底層實現(xiàn)原理?Redisson 如何解決分布式鎖的單點故障問題?

責任編輯:武曉燕 來源: 磊哥和Java
相關推薦

2024-09-24 16:30:46

分布式鎖Redis數(shù)據(jù)中間件

2022-08-11 18:27:50

面試Redis分布式鎖

2020-09-27 06:52:22

分布式存儲服務器

2025-07-17 00:05:00

MCPAI 技術Nacos 3.0

2025-11-05 01:55:00

2023-01-12 08:24:45

ZookeeperZK服務器

2021-06-03 08:55:54

分布式事務ACID

2024-09-25 17:44:08

2023-08-21 19:10:34

Redis分布式

2024-06-26 11:55:44

2024-10-07 10:07:31

2024-04-01 05:10:00

Redis數(shù)據(jù)庫分布式鎖

2024-01-02 13:15:00

分布式鎖RedissonRedis

2021-09-15 07:56:32

TypeScriptVue項目

2021-09-14 07:06:13

React項目TypeScript

2023-11-10 08:44:13

分布式鎖分布式系統(tǒng)

2024-10-07 08:52:59

分布式系統(tǒng)分布式 IDID

2024-02-22 17:02:09

IDUUID雪花算法

2024-08-12 17:36:54

2019-02-26 09:51:52

分布式鎖RedisZookeeper
點贊
收藏

51CTO技術棧公眾號

日本精品入口免费视频| www.88av| 日本乱理伦在线| 99精品久久免费看蜜臀剧情介绍| 清纯唯美亚洲综合| 欧美88888| 好吊妞国产欧美日韩免费观看网站| 狠狠色噜噜狠狠狠狠97| 亚洲国产一区二区在线| 亚洲成熟女性毛茸茸| 久久福利影视| 久久影院在线观看| 免费在线观看你懂的| 91精品麻豆| 色综合色狠狠天天综合色| 制服国产精品| 国产一区二区影视| 成人精品gif动图一区| 国产精品免费一区二区三区都可以| 精品欧美一区二区久久久久| 国产一区二区三区四区大秀| 欧美精品一区二区三| 亚洲精品第三页| 欧美www.| 五月天欧美精品| 四虎影院一区二区| 久久手机免费观看| a美女胸又www黄视频久久| 成人免费淫片视频软件| 亚洲AV无码成人精品区东京热| 欧美ab在线视频| 最近日韩中文字幕中文| av电影网站在线观看| 精品国产一区二区三区不卡蜜臂| 5566中文字幕一区二区电影 | 欧美一区=区| 欧美大片在线看| 日韩在线不卡av| 成人中文视频| 亚洲性69xxxbbb| 丰满少妇在线观看资源站| 日本国产一区| 欧美日韩视频一区二区| 国内自拍视频一区| 欧美香蕉视频| 在线国产亚洲欧美| 日韩欧美精品在线观看视频| 91九色美女在线视频| 洋洋av久久久久久久一区| 日韩第一页在线观看| 日本在线看片免费人成视1000| 日本一区二区三区免费乱视频| 欧美午夜精品理论片a级大开眼界| 黄色美女一级片| 大尺度一区二区| 动漫精品视频| 免费观看成年人视频| av在线一区二区三区| 91久色国产| 久久久精品毛片| 日韩vs国产vs欧美| 国产精品欧美一区二区三区奶水| 久久久国产免费| 日本网站在线观看一区二区三区 | 欧美激情一区二区在线| 色播亚洲婷婷| 激情在线小视频| 亚洲精品免费一二三区| 大西瓜av在线| 国产日韩电影| 欧美视频一二三区| 午夜福利123| 久久大胆人体视频| 亚洲女人天堂网| 欧美巨胸大乳hitomi| 小处雏高清一区二区三区| 久久亚洲精品成人| 日本五十熟hd丰满| 可以看av的网站久久看| 成人伊人精品色xxxx视频| 亚洲美女性生活| 91丨国产丨九色丨pron| 亚洲7777| 美女91在线| 色综合久久综合网欧美综合网| 国产aaaaa毛片| 一区二区视频| 亚洲欧洲日产国产网站| 中文字幕在线观看2018| 夜夜嗨av一区二区三区网站四季av| 日本一区二区在线免费播放| 国产原创中文av| thepron国产精品| 亚洲巨乳在线观看| 成人av影院在线观看| 色综合久久99| 一级 黄 色 片一| 日日狠狠久久偷偷综合色| 中文字幕在线看视频国产欧美| 青青草手机视频在线观看| 久久激情中文| 不卡一区二区三区视频| 超碰国产在线| 欧美日韩国产丝袜美女| 国产探花在线观看视频| 国产成人精品三级高清久久91| 欧美精品情趣视频| 国产91av在线播放| 成人国产精品视频| 中文字幕久久综合| 日韩一区二区三区免费视频| 日韩欧美激情在线| 美女100%露胸无遮挡| 亚洲国产清纯| 91夜夜未满十八勿入爽爽影院 | 天堂精品久久久久| 中文字幕国产亚洲2019| www日韩精品| 国产a视频精品免费观看| 亚洲日本精品一区| 奇米777日韩| 日韩精品亚洲视频| 国产福利久久久| 国产精品一区二区免费不卡| 视频一区国产精品| 三上悠亚激情av一区二区三区| 精品国产电影一区二区| 青娱乐在线视频免费观看| 精品综合免费视频观看| 亚洲蜜桃av| 成人网ww555视频免费看| 亚洲男人天堂视频| 久久久久久在线观看| 26uuu亚洲综合色| 黄色一级在线视频| 红杏aⅴ成人免费视频| 欧美激情va永久在线播放| 国产情侣一区二区| 综合电影一区二区三区| 亚洲欧美日韩综合网| 日韩av在线播放网址| 国产精品美女av| 福利视频在线播放| 欧美性色黄大片| 国产亚洲精品熟女国产成人| 老牛影视一区二区三区| 热re99久久精品国产99热| 黑人巨大亚洲一区二区久| 精品爽片免费看久久| 国产成人在线视频观看| 26uuu另类欧美| 精品久久久久久无码国产| 神马久久一区二区三区| 国产成人一区二区三区小说| 黄色在线观看网| 欧美三级在线看| 手机在线免费看片| 国产aⅴ综合色| 97超碰人人澡| 亚洲激情播播| 国产99久久精品一区二区| 国产高清视频在线| 欧美日本一区二区| 欧美极品aaaaabbbbb| 成人激情午夜影院| 久久久免费视频网站| 国产精品一区二区三区av麻 | 国产 福利 在线| 国产在线观看91一区二区三区| 国产精品91久久久| 免费日本一区二区三区视频| 日韩一级片网站| 日韩污视频在线观看| 欧美国产日韩亚洲一区| 久久久久久久久久一区二区| 欧美激情精品久久久六区热门| 精品欧美一区二区精品久久| 欧美xxxxxx| 不卡毛片在线看| 婷婷五月综合激情| 欧美日韩中文字幕一区| 欧美又粗又大又长| 久久蜜桃av一区二区天堂| 九九热99视频| 亚洲欧洲一级| 亚洲午夜精品一区二区| 大奶在线精品| 国产精品色婷婷视频| 日本高清成人vr专区| 日韩成人在线视频| 一级黄色片在线| 精品毛片网大全| 少妇高潮一区二区三区喷水| av一区二区三区黑人| 99热这里只有精品在线播放| 国内精品久久久久久久97牛牛 | 精品欧美一区二区在线观看视频 | 成人免费看片网址| 美女一区网站| 久久69精品久久久久久久电影好 | 国产美女明星三级做爰| 精品久久香蕉国产线看观看gif| 午夜国产福利视频| 久久看人人爽人人| 亚洲一级Av无码毛片久久精品| 日本亚洲视频在线| 99精品人妻少妇一区二区| 久久精品影视| 日韩欧美一区二区三区四区五区| 51亚洲精品| 成人有码在线视频| av在线日韩| 欧美性在线观看| 日本精品600av| 久久亚洲精品小早川怜子66| 国产三级视频在线| 日韩精品在线观看网站| 人妻偷人精品一区二区三区| 欧美精品久久99| 中文字幕一区二区人妻视频| 性做久久久久久久免费看| 国产这里有精品| 国产精品国产三级国产普通话三级| 国产精品久久久免费观看| 国产99一区视频免费| 欧美日韩精品区别| 男女视频一区二区| 日韩精品一区二区三区色欲av| 在线成人av| 激情五月婷婷六月| 欧美成人日本| 男人天堂成人网| 五月天久久久| 国产麻豆电影在线观看| 国产精品成人一区二区不卡| 特级西西444www大精品视频| 国产最新精品| 日韩久久精品一区二区三区| 欧美日韩一区二区三区四区不卡| 国产精品久久精品视| 91精品国产自产在线丝袜啪| 91久久国产自产拍夜夜嗨| 日韩三级精品| av一区二区在线看| 超碰成人免费| 国产一区精品视频| 日韩av三区| 久久久福利视频| 综合亚洲自拍| 日韩高清dvd| 99久久www免费| 欧美在线观看视频免费| 亚洲一级黄色| 欧美视频在线观看网站| 亚洲一区不卡| 99视频在线视频| 精品一区二区免费| 久久久久亚洲av无码麻豆| 国产成人免费在线观看| 亚洲色图欧美日韩| 久久无码av三级| 中文天堂资源在线| 亚洲视频一区在线| 精品少妇久久久| 日韩欧美在线观看| 亚洲图片欧美在线| 日韩精品自拍偷拍| 污视频在线免费观看| 尤物yw午夜国产精品视频| 欧美日韩视频在线播放| 欧美激情第6页| 新片速递亚洲合集欧美合集| 国产免费成人av| 一区二区三区亚洲变态调教大结局| 精品国产第一页| 青青草91久久久久久久久| 亚洲自拍偷拍一区二区三区| 国产精品vip| 国产成人久久777777| 精品一区二区国语对白| 妖精视频一区二区| 国产三级精品在线| 538任你躁在线精品视频网站| 午夜影院久久久| 中文字幕日本视频| 精品久久久久久久久久久久久久久| 欧美日韩国产综合视频 | 午夜精品一区二区三区视频| 亚洲第一久久影院| 一级成人免费视频| 亚洲国产精品久久久久久| 97电影在线观看| 欧美精品久久久久久久| 国产精品久久亚洲不卡| 国产精品我不卡| 国产精品国内免费一区二区三区| 欧洲精品一区二区三区久久| 蜜桃视频在线一区| 欧美精品欧美极品欧美激情| 国产精品成人网| 黄色片中文字幕| 精品国产欧美一区二区| av免费观看一区二区| 久久久久久久久久国产| 亚洲精品69| 日本一区二区三区四区在线观看| 欧美日韩 国产精品| 亚洲免费一级视频| 91色在线porny| 青青草原在线免费观看视频| 欧美色视频在线| 日本a一级在线免费播放| 欧美第一页在线| 婷婷久久免费视频| 三区精品视频观看| 亚洲专区在线| 欧美夫妇交换xxx| 一区二区成人在线| 国产免费黄色大片| 最新69国产成人精品视频免费| 在线看片国产福利你懂的| 高清av免费一区中文字幕| 久久久久久久久久久9不雅视频| 日韩精品视频久久| av一本久道久久综合久久鬼色| 久久亚洲国产成人精品性色| 69av一区二区三区| 性开放的欧美大片| 国产精品日韩久久久久| 久久av免费看| 成人黄色片视频| 91欧美一区二区| 亚洲综合一二三| 日韩高清中文字幕| 性国裸体高清亚洲| 久久精品日产第一区二区三区乱码 | 综合久久久久综合| 亚洲天堂网在线观看视频| 在线看日韩欧美| 成人黄页网站视频| 一本一本久久a久久精品综合妖精| 日韩电影在线免费看| 蜜乳av中文字幕| 欧美色网一区二区| 91最新在线| 成人精品视频在线| 在线国产一区| 人妻互换一二三区激情视频| 一区二区三区精品久久久| 性欧美8khd高清极品| 欧美激情综合色综合啪啪五月| 亚洲专区**| 僵尸世界大战2 在线播放| 97精品视频在线观看自产线路二| 国产精品777777| 国产一区二区三区视频免费| 国产福利亚洲| 亚洲成人动漫在线| 成人听书哪个软件好| 五月天综合激情网| 伊人久久免费视频| 国产精品2区| 日韩网站在线免费观看| 久久午夜免费电影| 91精品国自产| 欧美丰满少妇xxxxx做受| 激情亚洲另类图片区小说区| 热久久精品国产| 亚洲国产精品激情在线观看| 国产美女裸体无遮挡免费视频| 久久久久久久色| 奇米狠狠一区二区三区| 天天干天天av| 亚洲国产精品久久久久婷婷884| 瑟瑟在线观看| 国产在线精品成人一区二区三区| 自产国语精品视频| 黄色短视频在线观看| 欧美日韩一区二区在线观看 | 久久免费精品国产| 一本色道久久加勒比精品| 欧美精品电影| 久久精品国产美女| 国产毛片一区二区| 男人日女人网站| 美日韩丰满少妇在线观看| 窝窝社区一区二区| 欧美激情第四页| 日韩欧美国产激情| 3d玉蒲团在线观看| 日本中文不卡| 波多野结衣中文字幕一区| 最新在线中文字幕| 97国产在线视频| 99九九热只有国产精品| 欧美一区二区三区成人精品| 欧美一区二区人人喊爽| 欧美人体一区二区三区| 久久成人福利视频| 亚洲视频免费观看|