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

面試官:項目中如何實現分布式鎖?

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

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

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

1.分布式鎖實現方案

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

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

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

2.為什么Redis可以實現分布式鎖?

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

3.Redis如何實現分布式鎖?

使用 Redis 實現分布式鎖的方案有以下 4 種:

  • setnx(set if Not eXists):嘗試設置鍵 key 的值為 value,但如果 key 已經存在,則不會執行任何操作并返回 0,如果 key 不存在則加鎖成功。
  • 缺陷:存在死鎖問題、鎖誤刪問題、不可重入問題、鎖無法自動續期問題。
  • set nx ex/px:setnx 升級版本,Redis 2.6 版本后才能支持此語法。嘗試加鎖和設置鎖超時時間,使用案例 set key value nx px 3000。
  • 缺陷:存在鎖誤刪問題、不可重入問題、鎖無法自動續期問題。
  • Lua 腳本:解決鎖重入的問題
  • 缺陷:實現復雜、且存在鎖無法自動續期問題。
  • Redisson 框架:基于 Redis 實現分布式鎖的開源框架。其實現簡單、不存在鎖重入和鎖續期等問題。

問題解釋

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

綜合以上實現方案來看,生產級別使用 Redis 實現分布式鎖的方案,應該選用 Redisson 框架。

4.Redisson介紹

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

Redisson 官網:https://redisson.org/

Redisson 特性說明

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

5.Redisson實現分布式鎖

(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 服務連接信息,具體實現代碼如下:

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
public class RedissonConfig {
    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        // 也可以將 redis 配置信息保存到配置文件
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        return Redisson.create(config);
    }
}

(3)創建分布式鎖

Redisson 分布式鎖的操作和 Java 中的 ReentrantLock(可重入鎖)的操作很像,都是先使用 tryLock 嘗試獲?。ǚ枪剑╂i,再通過 unlock 釋放鎖,具體實現如下:

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
public class 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 {
                    // 模擬業務處理
                    TimeUnit.SECONDS.sleep(5);
                    return "成功獲取鎖,并執行業務代碼";
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    // 釋放鎖
                    lock.unlock();
                }
            } else {
                // 獲取鎖失敗
                return "獲取鎖失敗";
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "獲取鎖成功";
    }
}

a.實現公平鎖

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

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

b.實現讀寫鎖

Redisson 還可以創建讀寫鎖,如下代碼所示:

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

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

c.實現聯鎖

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

聯鎖的實現示例如下:

// 獲取需要加鎖的資源
RLock lock1 = redisson.getLock("lock1");
RLock lock2 = redisson.getLock("lock2");
// 聯鎖
RedissonMultiLock multiLock = new RedissonMultiLock(lock1, lock2);
try {
    // 一次性嘗試獲取所有鎖
    if (multiLock.tryLock()) {
        // 獲取鎖成功...
    }
} finally {
    // 釋放所有鎖
    multiLock.unlock();
}
責任編輯:姜華 來源: 磊哥和Java
相關推薦

2025-07-22 01:33:00

分布式Zookeeper

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-01-02 13:15:00

分布式鎖RedissonRedis

2024-04-01 05:10:00

Redis數據庫分布式鎖

2021-09-15 07:56:32

TypeScriptVue項目

2021-09-14 07:06:13

React項目TypeScript

2023-11-10 08:44:13

分布式鎖分布式系統

2024-10-07 08:52:59

分布式系統分布式 IDID

2024-02-22 17:02:09

IDUUID雪花算法

2024-08-12 17:36:54

2019-02-26 09:51:52

分布式鎖RedisZookeeper
點贊
收藏

51CTO技術棧公眾號

色偷偷偷亚洲综合网另类| 亚洲成人在线观看视频| 成人免费xxxxx在线观看| 成人在线观看高清| 狠狠一区二区三区| 色悠久久久久综合欧美99| 午夜一区二区三视频在线观看| 国产裸体永久免费无遮挡| 亚洲激情偷拍| 中文字幕亚洲综合久久筱田步美| 激情综合激情五月| 二区三区不卡| 亚洲精品乱码久久久久久久久| 精品视频免费观看| 一二三四区在线| 99精品视频免费观看| 中文字幕日韩专区| 性欧美18—19sex性高清| 素人一区二区三区| 亚洲成av人片一区二区三区| 手机看片福利永久国产日韩| 亚洲av无码乱码国产精品久久| 日日夜夜一区二区| 久久久中文字幕| 精品一区二区在线观看视频| 日本午夜精品久久久| 欧美老年两性高潮| 99热在线这里只有精品| www.91在线| 不卡的看片网站| 91久久久久久久久久| 精品国产xxx| 亚洲精品韩国| 欧美精品一区二区免费| 99精品全国免费观看| 丝袜连裤袜欧美激情日韩| 欧美不卡一二三| 视频免费1区二区三区| 日韩美女在线看免费观看| 午夜精品成人在线视频| www.激情网| 免费av在线网站| 国产精品乱人伦中文| 欧美激情论坛| 人妻无码一区二区三区| 精品国产亚洲一区二区三区| 欧美三级资源在线| 国产精品少妇在线视频| 在线观看涩涩| 精品久久久久久久久久久| 成人午夜免费在线视频| 亚洲淫性视频| 亚洲精品自拍动漫在线| 中文字幕乱码一区二区三区| 在线激情网站| 亚洲欧洲www| 中文字幕日韩精品一区二区| 1区2区3区在线观看| 国产精品不卡一区| 一区在线电影| www久久日com| 一级中文字幕一区二区| 日韩免费在线观看av| 国产高清在线a视频大全| 亚洲一区精品在线| 人妻夜夜添夜夜无码av| 国产在线美女| 精品国产老师黑色丝袜高跟鞋| av7777777| 视频二区不卡| 欧美日韩一区二区三区四区| jizz18女人| 日韩欧美中文字幕在线视频 | 久久国产成人精品国产成人亚洲| 国产在线拍揄自揄拍视频| 亚洲成人高清在线| 日韩黄色片视频| 激情亚洲影院在线观看| 欧美喷潮久久久xxxxx| 日本女人黄色片| 卡通动漫国产精品| 亚洲午夜av电影| 成人免费精品动漫网站| 亚洲婷婷在线| 国产精品成人av性教育| 国产免费一区二区三区最新不卡| 国产a精品视频| 国内久久久精品| 全部毛片永久免费看| 日本成人中文字幕在线视频| 91香蕉嫩草影院入口| 色香蕉在线视频| 欧美国产欧美综合| 屁屁影院ccyy国产第一页| 亚洲美女尤物影院| 在线观看91av| 亚洲黄色在线网站| 天天综合国产| 2019最新中文字幕| 一级全黄少妇性色生活片| 成人一级片网址| 亚洲国产一区二区精品视频 | 国产精品999.| 一区二区导航| 欧美伦理91i| 国产黄色免费视频| 成人久久18免费网站麻豆| 日韩经典在线视频| free性m.freesex欧美| 欧美日韩一区二区电影| 亚洲精品中文字幕在线播放| 午夜激情久久| 国产极品精品在线观看| 黄片毛片在线看| 国产精品传媒入口麻豆| 国产精品宾馆在线精品酒店| 日韩免费成人| 久久精品国产视频| 国产字幕在线观看| 99久久综合99久久综合网站| 中文字幕在线乱| 高清在线一区| 亚洲色图美腿丝袜| 国产成人精品一区二三区| 国产精品一区二区久久精品爱涩| 日韩电影在线播放| 周于希免费高清在线观看| 日韩欧美中文一区| 日韩国产第一页| 日本美女一区二区| 欧美一区二区三区在线免费观看| xxxx成人| 精品国产百合女同互慰| 波多野结衣不卡视频| 久久国产综合精品| 五月天色一区| 国产乱子精品一区二区在线观看| 亚洲欧美国内爽妇网| 国产做受高潮漫动| 成人黄色小视频在线观看| 日本成人在线不卡| 亚洲欧洲专区| 久久天天躁夜夜躁狠狠躁2022| 亚洲一区二区三区高清视频| 中文字幕av一区二区三区| 噼里啪啦国语在线观看免费版高清版| 日韩有码一区| 日本欧美在线视频| 青青草免费在线视频| 美女精品视频| 中文字幕+乱码+中文乱码91| 国产宾馆实践打屁股91| 51xx午夜影福利| 免费观看性欧美大片无片| 久久视频国产精品免费视频在线 | 亚久久调教视频| 麻豆成人在线播放| 亚洲女同av| 亚洲视频在线观看| 中国女人一级一次看片| 国产精品污网站| 亚洲免费av一区| 在线成人直播| av成人午夜| 丰满大乳少妇在线观看网站| 亚洲国产欧美一区二区三区久久| 日韩成人免费在线观看| 久久午夜电影网| 九九热在线免费| 羞羞色午夜精品一区二区三区| 亚洲va久久久噜噜噜| 中文av资源在线| 亚洲国产精品va在线看黑人| 中文字幕黄色片| 中文无字幕一区二区三区 | 黄色片视频免费| 国产精品久久久久久久久久免费看| 伊人成人222| 欧美日韩四区| 青青成人在线| 91精品在线免费视频| 久久久噜噜噜久久久| 看电影就来5566av视频在线播放| 欧美日韩精品久久久| 欧美三级免费看| 久久午夜羞羞影院免费观看| 国产三级国产精品国产专区50| 中文字幕亚洲精品乱码| 久久99导航| 亚洲综合伊人| 欧美性在线观看| 岛国成人毛片| 日韩av综合网| 国产原创中文av| 狠狠做深爱婷婷久久综合一区| jizz中文字幕| 成人性色生活片免费看爆迷你毛片| 国产欧美高清在线| 欧美日本三区| 亚洲欧洲精品在线| 欧亚精品一区| 91在线观看免费| 欧美精品日日操| 久久免费成人精品视频| av在线中文| 亚洲国产三级网| 国产有码在线观看| 色综合中文字幕| 久久亚洲AV无码| 国产免费成人在线视频| 人妻体内射精一区二区三区| 男人操女人的视频在线观看欧美 | 蜜臀av性久久久久av蜜臀妖精| 成人一级生活片| 99久久亚洲精品蜜臀| 免费99视频| 精品欧美午夜寂寞影院| 91精品视频网站| 欧美日韩女优| 2025国产精品视频| 成人女同在线观看| 欧美老女人在线视频| 在线毛片网站| 亚洲欧洲在线视频| 日本高清视频在线| 日韩一区二区三区在线| 一级片视频网站| 在线观看欧美精品| 国产亚洲欧美在线精品| 欧美日韩国产页| 国产对白videos麻豆高潮| 亚洲精品一二三| 午夜剧场免费在线观看| 国产精品久久看| 国产探花视频在线播放| 久久综合九色综合久久久精品综合| 性活交片大全免费看| 国产成人综合亚洲网站| 亚洲综合在线一区二区| 极品少妇xxxx精品少妇| 性生活免费在线观看| 美女视频一区二区| 亚洲国产精品三区| 日韩 欧美一区二区三区| 少妇人妻互换不带套| 久久在线精品| 男人天堂成人在线| 老牛国产精品一区的观看方式| 国产高清精品在线观看| 午夜在线观看免费一区| 粗暴91大变态调教| 麻豆久久婷婷| 欧美激情精品久久久久久小说| 久久综合伊人| 午夜免费高清视频| 蜜桃av一区二区三区电影| 久热精品在线播放| 国产在线精品免费av| 午夜激情视频网| 成人中文字幕电影| 少妇激情一区二区三区视频| 91小视频免费看| 少妇无套高潮一二三区| 中文字幕日韩一区| 免费在线观看国产精品| 亚洲成年人影院| 少妇高潮av久久久久久| 欧美丝袜丝nylons| 国产美女自慰在线观看| 精品国产三级电影在线观看| 同心难改在线观看| 91精品1区2区| 亚洲天堂视频网| 欧美一卡二卡三卡| 可以免费看毛片的网站| 亚洲人成网站免费播放| 蜜桃视频网站在线| 欧美激情久久久久久| 欧美大电影免费观看| 国产日韩专区在线| 国产91精品入| 日韩精品欧美一区二区三区| 一个色综合网| 久草青青在线观看| 韩国三级中文字幕hd久久精品| 日本精品一二三| 国产欧美视频在线观看| 日韩一区二区三区四区在线| 欧美性色视频在线| 国产麻豆精品一区| 亚洲男人av在线| av网址在线看| 青青草99啪国产免费| 亚洲国产伊人| 欧美激情第一页在线观看| 综合视频在线| 最近免费中文字幕中文高清百度| 国产一区二区成人久久免费影院| 男生裸体视频网站| 亚洲日本电影在线| 日韩一级在线视频| 精品人伦一区二区色婷婷| 岛国大片在线观看| 午夜精品免费视频| 日韩精品中文字幕一区二区| 视频一区免费观看| 国产一区91| 久久久久久久久久久久国产精品| 国产欧美日产一区| 久久午夜免费视频| 欧美一区二区三区人| h网站在线免费观看| 97精品在线观看| 日韩中文字幕在线一区| 亚洲一区美女| 久久亚洲精品伦理| 精品无码人妻少妇久久久久久| 亚洲免费电影在线| 最近国语视频在线观看免费播放| 日韩国产精品视频| 国产丝袜在线观看视频| 亚洲影视中文字幕| 欧美wwwww| 邪恶网站在线观看| 国产亚洲一二三区| 精品91久久久| 亚洲福利视频网站| 手机在线免费观看av| 亚洲va男人天堂| 99久久婷婷| 日韩成人精品视频在线观看| 国产午夜亚洲精品理论片色戒| 亚洲日本韩国在线| 日韩成人中文字幕在线观看| 免费在线国产视频| 不卡视频一区| 欧美三级免费| 911亚洲精选| 亚洲中国最大av网站| 精品久久久久成人码免费动漫| 成年人精品视频| 精品麻豆剧传媒av国产九九九| 精品国产无码在线| 国产一区二区三区四区五区入口| 久久精品亚洲a| 91精品国产综合久久精品麻豆| 精品176二区| 亚洲qvod图片区电影| 欧美成人有码| 久久国产免费视频| 亚洲一二三四区不卡| 人妻少妇精品无码专区| 欧美亚洲视频在线看网址| 免费看av成人| 成人黄色一区二区| 中文欧美字幕免费| 91国内精品视频| 欧美成人午夜剧场免费观看| jizz性欧美2| 又粗又黑又大的吊av| 国产色婷婷亚洲99精品小说| 中文在线观看免费高清| 日韩中文字幕精品视频| 日韩精品中文字幕吗一区二区| 黄色一级视频在线播放| 久久久久成人黄色影片| 中国一级片黄色一级片黄| 日韩在线观看成人| 亚洲精品福利| 动漫av网站免费观看| 国产精品日日摸夜夜摸av| 国产裸体永久免费无遮挡| 午夜精品久久久久久久男人的天堂| 国产精品午夜一区二区三区| xxx国产在线观看| 一区二区三区精品在线观看| 午夜影院免费体验区| 国产精品美女免费视频| 欧美精品激情| 亚洲一级中文字幕| 91.com视频| 欧美13videosex性极品| 一区二区不卡在线| 不卡的电视剧免费网站有什么| 在线观看你懂的网站| 欧美日韩ab片| 精品国产网站| 日本黄色大片在线观看| 91久久精品一区二区三区| 在线播放免费av| 日本在线播放一区| 国产成人欧美日韩在线电影| 精品国产xxx| 欧美激情第一页xxx| 精品视频久久| www.四虎在线| 欧美精品 日韩| 成人性生交大片免费观看网站| 日本美女爱爱视频| 国产清纯在线一区二区www|