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

如何使用Redisson實現分布式鎖?

數據庫 Redis
分布式鎖是一種在分布式環境下的鎖實現,它允許在多個進程或服務器之間協調對共享資源的訪問或操作。分布式鎖的關鍵特性是它能夠在集群內的不同節點間保持其鎖定狀態,使得某一時刻僅有一個客戶端能夠獲取并持有該鎖,從而確保對公共資源的原子性和一致性訪問。

在分布式系統中,當多個線程(或進程)同時操作同一個資源時,為了保證數據一致性問題,所以就需要一種機制來確保在同一時間只有一個線程(或進程)能夠對資源進行修改,這就是分布式鎖的作用。

分布式鎖是一種在分布式環境下的鎖實現,它允許在多個進程或服務器之間協調對共享資源的訪問或操作。分布式鎖的關鍵特性是它能夠在集群內的不同節點間保持其鎖定狀態,使得某一時刻僅有一個客戶端能夠獲取并持有該鎖,從而確保對公共資源的原子性和一致性訪問。

實現分布式鎖的方式有多種,例如基于數據庫、Redis、ZooKeeper 等中間件來實現,它們通常依賴于這些中間件提供的事務特性,或者命令語義來達到分布式環境下的鎖效果。例如,Redis 通過 SETNX 命令配合過期時間可實現一個簡單的分布式鎖方案。

1、SETNX 存在的問題

雖然可以使用 SETNX 命令方便的實現分布式鎖,但是 SETNX 存在以下問題:

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

那么如何解決以上這些問題呢?這就是今天要講的重點 Redisson,使用 Redisson 框架就可以解決以上這些問題了

2、什么是 Redisson?

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

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

3、Redisson 特性說明

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

4、Redisson 使用分布式鎖

(1)添加 Redisson 框架支持

如果是 Spring Boot 項目,直接添加 Redisson 為 Spring Boot 寫的如下依賴:

<!-- Redisson -->
<!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson-spring-boot-starter</artifactId>
  <version>3.25.2</version> <!-- 請根據實際情況使用最新版本 -->
</dependency>

其他項目,訪問 https://mvnrepository.com/search?q=Redisson 獲取具體依賴配置。

(2)配置 RedissonClient 對象

將 RedissonClient 重寫,存放到 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 嘗試獲取(非公平)鎖,最后再通過 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 "獲取鎖成功";
    }
}

實現公平鎖

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

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

實現讀寫鎖

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

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

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

實現聯鎖

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();
}

課后思考

以上 Redisson 只是對 Redis 單節點加鎖實現分布式鎖的,但分布式環境中的 Redis 一定采用的是多機部署(主從、哨兵或集群),那么在多機環境下以上代碼實現分布式鎖還能用嗎?如果不能用,那該如何處理呢?

責任編輯:姜華 來源: Java中文社群
相關推薦

2022-08-04 08:45:50

Redisson分布式鎖工具

2024-10-07 10:07:31

2024-04-01 05:10:00

Redis數據庫分布式鎖

2025-07-30 09:34:04

2021-07-06 08:37:29

Redisson分布式

2023-08-21 19:10:34

Redis分布式

2021-06-30 14:56:12

Redisson分布式公平鎖

2021-07-02 08:51:09

Redisson分布式鎖公平鎖

2023-09-04 08:12:16

分布式鎖Springboot

2023-08-27 22:13:59

Redisson分布式緩存

2021-07-01 09:42:08

Redisson分布式

2025-03-25 10:29:52

2021-07-07 07:09:49

Redisson分布式鎖源碼

2021-09-17 07:51:24

RedissonRedis分布式

2022-06-30 08:04:16

Redis分布式鎖Redisson

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2021-06-27 21:24:55

RedissonJava數據

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2022-01-06 10:58:07

Redis數據分布式鎖

2024-11-28 15:11:28

點贊
收藏

51CTO技術棧公眾號

图片区亚洲欧美小说区| 深夜成人影院| 不卡一卡二卡三乱码免费网站| 欧美在线视频观看免费网站| 国产一区在线观看免费| 亚洲三级av| 欧美主播一区二区三区| 欧美日韩dvd| 国产精品ⅴa有声小说| 国产高清精品网站| 国产精品福利网| 久草中文在线视频| 日韩一区二区三区免费播放| 亚洲精品一区二区在线观看| 日韩不卡一二三| 国产中文在线播放| 亚洲三级久久久| 欧美精品123| 亚洲国产av一区二区| 日本女人一区二区三区| 久久久久久一区二区三区| 精品视频第一页| 一区二区导航| 亚洲精品一区二区三区99| 在线观看亚洲色图| 韩国美女久久| 亚洲国产精品久久人人爱| 亚洲一区美女| 福利在线播放| 26uuu另类欧美亚洲曰本| 成人免费福利在线| 久久这里只有精品9| 日韩一级欧洲| 国内伊人久久久久久网站视频 | 日韩日本欧美亚洲| 我和岳m愉情xxxⅹ视频| 亚洲三级av| 日韩一区二区三区四区| 国产原创精品在线| 欧美极度另类| 欧美性感美女h网站在线观看免费| 成人午夜免费在线视频| 性欧美猛交videos| 亚洲色图都市小说| 亚洲自拍偷拍一区二区三区| 自拍视频在线免费观看| 国产欧美一区二区在线| 日韩av不卡播放| 国产有码在线| 中文字幕欧美国产| 亚洲亚洲精品三区日韩精品在线视频| 九色视频在线播放| 欧美激情一区二区三区四区| 日韩一区不卡| 在线观看麻豆蜜桃| 国产精品电影一区二区| 中文视频一区视频二区视频三区| 最新电影电视剧在线观看免费观看| 国产日本欧美一区二区| 日韩av电影免费观看| av影片在线看| 国产精品天干天干在线综合| 亚洲欧美日韩国产yyy| 四虎久久免费| 亚洲最新在线观看| 欧美在线一区视频| 最新欧美色图| 欧美网站大全在线观看| gai在线观看免费高清| 日韩免费一级| 亚洲风情亚aⅴ在线发布| 精品国产人妻一区二区三区| 亚洲小说图片| 色777狠狠综合秋免鲁丝| 一起操在线播放| 欧美日韩精选| 55夜色66夜色国产精品视频| 国产精品自拍第一页| 精品一区二区三区欧美| 99在线视频播放| 天天综合天天色| 国产午夜精品美女毛片视频| 免费看啪啪网站| 国产精品探花在线| 色综合夜色一区| 久久久久久久高清| 91综合久久爱com| 亚洲欧美日韩精品久久| 一级黄色片日本| 国产欧美一区二区色老头| 国产精品偷伦视频免费观看国产| 国产黄色一区二区| 久久精品免费在线观看| 男同互操gay射视频在线看| 日本在线高清| 337p亚洲精品色噜噜狠狠| 噜噜噜在线视频| 久久一本综合| 欧洲中文字幕国产精品| 国产精品爽爽久久久久久| 91美女片黄在线观看| 中文字幕中文字幕在线中一区高清| 国语对白在线刺激| 欧美午夜精品一区二区蜜桃 | 91视频国产观看| 伊人久久大香线蕉av一区| 妞干网免费在线视频| 欧美精品丝袜中出| 亚洲天堂网一区二区| 五月天久久网站| 国产精品99免视看9| 午夜精品久久久久久久99| 中文字幕乱码一区二区免费| www.99热这里只有精品| 精品一区二区三区在线观看视频| 亚洲人成在线观| 欧美三级韩国三级日本三斤在线观看| 国产一区二区三区国产| 日韩av不卡播放| 免费h视频在线观看| 日韩三级中文字幕| 久艹在线观看视频| 免费成人在线影院| 欧美久久久久久久| 啊啊啊久久久| 欧美tickling网站挠脚心| 在线观看亚洲网站| 久久精品72免费观看| 日本高清不卡三区| 午夜久久中文| 亚洲高清av在线| 麻豆影视在线播放| 国产乱理伦片在线观看夜一区| 亚洲一区三区| 日韩午夜视频在线| 日韩在线视频一区| 亚洲一卡二卡在线| 国产精品久久久久久久久免费丝袜| www.日日操| 精品影片在线观看的网站| 欧美一级淫片aaaaaaa视频| 婷婷开心激情网| 动漫精品一区二区| 欧美图片一区二区| 亚洲精品1区| 久久久福利视频| 黑人巨大亚洲一区二区久 | 欧美精品欧美极品欧美激情| 亚洲狠狠婷婷| 蜜桃传媒视频麻豆第一区免费观看 | 在线看成人短视频| 热99精品只有里视频精品| 免费在线黄色影片| 欧美亚洲国产一区二区三区va| 香蕉视频久久久| 久久精品二区亚洲w码| 99久久久无码国产精品性色戒| www999久久| 欧美日韩xxx| 色婷婷综合视频| 色老综合老女人久久久| 日本综合在线观看| 国产一区二区三区国产| 日韩精品一区在线视频| 欧美男人操女人视频| 日本韩国在线不卡| 95在线视频| 日韩欧美区一区二| 天天爽夜夜爽夜夜爽精品| 久久久久成人黄色影片| 一区二区免费av| 欧美在线影院| 精品在线一区| 日韩一区精品| 欧美人在线视频| 飘雪影视在线观看免费观看| 欧美三级视频在线播放| 婷婷在线精品视频| av一二三不卡影片| 天天干天天综合| 亚洲调教视频在线观看| 青青草久久网络| 久久爱www.| 日韩av免费看| av在线影院| 日韩av影视综合网| 国产精品一二三四五区| 亚洲福利一区二区三区| 日韩毛片无码永久免费看| 激情欧美日韩一区二区| 日日橹狠狠爱欧美超碰| 欧美hd在线| 国产欧美日韩综合一区在线观看| 成人a在线观看高清电影| www.日韩视频| 黄上黄在线观看| 精品国产凹凸成av人导航| 最近中文字幕免费在线观看| 亚洲成在线观看| 国产第一页精品| jvid福利写真一区二区三区| 狠狠操狠狠干视频| 99在线精品视频在线观看| 中国人体摄影一区二区三区| 久久99国内| 国产精品白丝jk白祙| 热久久久久久| 日韩av日韩在线观看| 青青在线视频| 日韩视频亚洲视频| 久久经典视频| 精品偷拍一区二区三区在线看| 国产精品美女一区| 91久久精品一区二区三| 日韩欧美亚洲国产| 亚洲欧美日韩人成在线播放| 成人小视频免费看| www一区二区| 中文成人无字幕乱码精品区| 国产在线看一区| 在线观看的毛片| 蘑菇福利视频一区播放| 欧美一级视频在线播放| 欧美成人嫩草网站| 波多野结衣三级在线| 成人激情在线| 色噜噜狠狠一区二区三区| 日韩深夜福利| 国新精品乱码一区二区三区18| 欧美高清hd| 成人免费xxxxx在线观看| 巨大黑人极品videos精品| 国产精品海角社区在线观看| 日日夜夜天天综合| 国产97色在线| 日韩欧美精品电影| 日本久久久久久久久久久| 伊人网在线播放| 欧美一区二区三区免费视| 色偷偷偷在线视频播放| 777777777亚洲妇女| 理论片午夜视频在线观看| 97国产一区二区精品久久呦| av剧情在线观看| 26uuu久久噜噜噜噜| 在线高清av| 国产不卡在线观看| 四虎4545www国产精品| 国产精品成人av性教育| 国产第一精品| 91久久精品国产| 欧美精品三级在线| 高清视频一区| 欧美福利在线播放网址导航| 久久久久久久有限公司| 国产亚洲一区二区三区啪| 三级三级久久三级久久18| 91一区二区三区四区| av动漫在线播放| 国产欧美日韩一级| 成年人小视频网站| 蜜桃在线一区二区三区| 亚洲高清视频免费| 成人免费视频一区二区| 国产精品jizz| 国产精品理伦片| 国产一区二区播放| 亚洲国产三级在线| 成人免费毛片男人用品| 欧美精品在欧美一区二区少妇| 免费黄色一级大片| 日韩一区二区中文字幕| 色wwwwww| 深夜成人在线观看| 成年人国产在线观看| 国产精品69精品一区二区三区| 日韩伦理一区二区| 国产一区二区免费电影| 精品国产一区二区三区小蝌蚪| 麻豆md0077饥渴少妇| 国产亚洲激情| 久久久久久蜜桃一区二区| 国产精品 日产精品 欧美精品| 国产网站无遮挡| 亚洲品质自拍视频网站| 免费看日韩毛片| 欧美伦理视频网站| 日韩永久免费视频| 在线亚洲国产精品网| 国产偷倩在线播放| 国产精品入口尤物| 加勒比色综合久久久久久久久| 翔田千里亚洲一二三区| 亚洲麻豆一区| 亚洲日本黄色片| 久久久一区二区三区| 国产成人无码aa精品一区| 色婷婷亚洲综合| 成人毛片视频免费看| 中文字幕日韩av| 亚洲性色av| 国产精品一区二区欧美黑人喷潮水| 日韩成人三级| 欧美日韩一区二区在线免费观看| 国精品**一区二区三区在线蜜桃| 青青草福利视频| 亚洲午夜成aⅴ人片| 一区二区久久精品66国产精品| 日韩av在线免费播放| 亚洲奶水xxxx哺乳期| 成人h片在线播放免费网站| 免费久久精品| 黄色免费福利视频| 国产精品综合一区二区| 亚洲色图欧美色| 欧美性猛交xxxx偷拍洗澡| 国产黄色大片网站| 久久精品91久久香蕉加勒比| 日韩中文视频| 日本成人三级| 久久亚洲欧美| 毛片网站免费观看| 午夜精品一区二区三区三上悠亚| aa视频在线免费观看| 日韩亚洲一区二区| 电影久久久久久| 欧美亚洲另类久久综合| 国产一区二区精品| 欧类av怡春院| 亚洲va中文字幕| 人妻无码中文字幕| 欧美激情视频一区二区三区不卡| 99精品视频在线免费播放| 亚洲国产精品毛片| 日本不卡视频一二三区| 国产熟女一区二区| 欧美视频日韩视频在线观看| 精品欧美不卡一区二区在线观看 | 国内精品国产三级国产99| 美女在线观看视频一区二区| 国产视频123区| 欧美另类变人与禽xxxxx| av电影在线观看一区二区三区| 国产精品久久久久久久久久三级 | 欧美人与动牲交xxxxbbbb| 国产精品一品二品| 精品无码av在线| 亚洲成人xxx| 欧美13videosex性极品| 国模一区二区三区私拍视频| 亚洲免费播放| 西西444www无码大胆| 欧美系列在线观看| 精产国品自在线www| 亚洲自拍高清视频网站| 激情久久婷婷| 日韩乱码人妻无码中文字幕久久| 色嗨嗨av一区二区三区| 成a人v在线播放| 亚洲va国产va天堂va久久| 伊人成人网在线看| 丰满少妇一区二区三区| 一本大道久久a久久综合| 国产在线一在线二| 国产三级精品网站| 国内一区二区三区| 成人h动漫精品一区| 欧美亚洲高清一区二区三区不卡| 激情在线小视频| 国产综合色一区二区三区| 玖玖在线精品| 日韩成人短视频| 日韩精品视频在线免费观看| 亚洲电影有码| 日韩久久久久久久久久久久| 91视频国产观看| 国产精品色综合| 欧美亚洲国产成人精品| 日韩免费视频| 亚洲午夜久久久久久久久| 色中色一区二区| av中文字幕在线观看| 农村寡妇一区二区三区| 国产综合久久久久久久久久久久| 久久精品视频久久| 一区二区三区四区视频| 97青娱国产盛宴精品视频| 成人黄色一区二区| 一区二区三区欧美在线观看| 日本成人一区| 5g影院天天爽成人免费下载| 香蕉久久夜色精品国产| 波多野结衣久久久久| 日韩精品亚洲精品| 日韩成人久久| 在线观看高清免费视频| 亚洲电影中文字幕在线观看| av资源种子在线观看| 国产一区免费在线| 国内精品久久久久影院色|