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

Spring自帶分布式鎖你用過嗎?

云計算 分布式
Spring Integration 的分布式鎖為開發者提供了一種在分布式系統中實現可靠同步的有效方法。通過合理選擇和使用這些鎖實現,可以確保對共享資源的訪問在多個節點之間保持協調一致,從而提高系統的整體可靠性和性能。

環境:SpringBoot2.7.12

本篇文章將會為大家介紹有關spring integration提供的分布式鎖功能。

1. 簡介

Spring Integration 是一個框架,用于構建事件驅動的應用程序。在 Spring Integration 中,LockRegistry 是一個接口,用于管理分布式鎖。分布式鎖是一種同步機制,用于確保在分布式系統中的多個節點之間對共享資源的互斥訪問。

LockRegistry及相關子接口(如:RenewableLockRegistry) 接口的主要功能:

  • 獲取鎖:當應用程序需要訪問共享資源時,它可以通過 LockRegistry 獲取一個鎖。
  • 釋放鎖:當應用程序完成對共享資源的訪問后,它應該釋放鎖,以便其他應用程序可以獲取它(第一點中提到,并沒有提供直接釋放鎖的操作,而是內部自動完成)。
  • 續期:提供續期機制,以便在需要時延長鎖的持有時間。

常見的 LockRegistry 實現包括基于數據庫、ZooKeeper 和 Redis 的實現。

公共依賴

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-integration</artifactId>
</dependency>

2. 基于數據庫分布式鎖

引入依賴

<dependency>
  <groupId>org.springframework.integration</groupId>
  <artifactId>spring-integration-jdbc</artifactId>
</dependency>
<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.30</version>
</dependency>

配置

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring_lock?serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false
    username: root
    password: xxxooo
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      minimumIdle: 10
      maximumPoolSize: 200
---
spring:
  integration:
    jdbc:
      initialize-schema: always
      # 基于數據庫需要執行初始化腳本
      schema: classpath:schema-mysql.sql

注冊核心Bean對象

@Bean
public DefaultLockRepository defaultLockRepository(DataSource dataSource) {
  DefaultLockRepository lockRepository = new DefaultLockRepository(dataSource);
  // 這里根據你的業務需要,配置表前綴,默認:IN_
  lockRepository.setPrefix("T_") ;
  return lockRepository ;
}


// 注冊基于數據庫的分布式鎖
@Bean
public JdbcLockRegistry jdbcLockRegistry(DefaultLockRepository lockRepository) {
  return new JdbcLockRegistry(lockRepository) ;
}

測試用例

@Test
public void testLock() throws Exception
  int len = 10 ;
  CountDownLatch cdl = new CountDownLatch(len) ;
  CountDownLatch waiter = new CountDownLatch(len) ;
  Thread[] ts = new Thread[len] ;
  for (int i = 0; i < len; i++) {
    ts[i] = new Thread(() -> {
      waiter.countDown() ;
      System.out.println(Thread.currentThread().getName() + " - 準備獲取鎖") ;
      try {
        waiter.await() ;
      } catch (InterruptedException e1) {
        e1.printStackTrace();
      }
      // 獲取鎖
      Lock lock = registry.obtain("drug_store_key_001") ;
      lock.lock() ;
      System.out.println(Thread.currentThread().getName() + " - 獲取鎖成功") ;
      try {
        try {
          TimeUnit.SECONDS.sleep(2) ;
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      } finally {
        // 釋放鎖
        lock.unlock() ;
        cdl.countDown() ;
        System.out.println(Thread.currentThread().getName() + " - 鎖釋放成功") ;
      }
    }, "T - " + i) ;
  }
  for (int i = 0; i < len; i++) {
    ts[i].start() ; 
  }
  cdl.await() ;
}

數據庫

圖片圖片

鎖的實現JdbcLock,該對象實現了java.util.concurrent.locks.Lock,所以該鎖是支持重入等操作的。

配置鎖獲取失敗后的重試間隔,默認值100ms

JdbcLockRegistry jdbcLockRegistry = new JdbcLockRegistry(lockRepository);
// 定義鎖對象時設置當獲取鎖失敗后重試間隔時間。
jdbcLockRegistry.setIdleBetweenTries(Duration.ofMillis(200)) ;

鎖續期

jdbcLockRegistry.renewLock("drug_store_key_001");

3. 基于Redis分布式鎖

引入依賴

<dependency>
  <groupId>org.springframework.integration</groupId>
  <artifactId>spring-integration-jdbc</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置

spring:
  redis:
    host: localhost
    port: 6379
    password: xxxooo
    database: 8
    lettuce:
      pool:
        maxActive: 8
        maxIdle: 100
        minIdle: 10
        maxWait: -1

測試用例

測試代碼與上面基于JDBC的一樣,只需要修改調用加鎖的代碼即可

Lock lock = redisLockRegistry.obtain("001") ;

設置鎖的有效期,默認是60s

// 第三個參數設置了key的有效期,這里改成10s
RedisLockRegistry redisLockRegistry = new RedisLockRegistry(connectionFactory, registryKey, 10000) ;

注意:redis key的有效期設置為10s,如果你的業務執行超過了10s,那么程序將會報錯。并沒有redission watch dog機制。

Exception in thread "T - 0" java.lang.IllegalStateException: Lock was released in the store due to expiration. The integrity of data protected by this lock may have been compromised.
  at org.springframework.integration.redis.util.RedisLockRegistry$RedisLock.unlock(RedisLockRegistry.java:450)
  at com.pack.SpringIntegrationDemoApplicationTests.lambda$1(SpringIntegrationDemoApplicationTests.java:83)
  at java.lang.Thread.run(Thread.java:748)

如果10s過期后key自動刪除后,其它線程是否能立馬獲取到鎖呢?如果是單節點中其它現在也不能獲取鎖,必須等上一個線程結束后才可以,這是因為在內部還維護了一個ReentrantLock鎖,在獲取分布式鎖前要先獲取本地的一個鎖。

private abstract class RedisLock implements Lock {
  private final ReentrantLock localLock = new ReentrantLock();
  public final void lock() {
      this.localLock.lock();
      while (true) {
        try {
          if (tryRedisLock(-1L)) {
            return;
          }
        } catch (InterruptedException e) {
        } catch (Exception e) {
          this.localLock.unlock();
          rethrowAsLockException(e);
        }
      }
    }
}

注意:不管是基于數據庫還是Redis都要先獲取本地的鎖

Spring Cloud Task就使用到了Spring Integration中的鎖基于數據庫的。

總結:Spring Integration 的分布式鎖為開發者提供了一種在分布式系統中實現可靠同步的有效方法。通過合理選擇和使用這些鎖實現,可以確保對共享資源的訪問在多個節點之間保持協調一致,從而提高系統的整體可靠性和性能。

完畢!??!

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2021-10-09 11:34:59

MySQL分布式鎖庫存

2024-04-26 08:06:58

分布式系統

2023-09-26 08:16:25

分布式鎖數據庫

2022-07-06 08:01:05

數據庫分布式

2019-06-19 15:40:06

分布式鎖RedisJava

2020-07-15 16:50:57

Spring BootRedisJava

2016-11-02 12:06:27

分布式系統大數據

2021-07-26 11:09:46

Redis分布式技術

2022-05-18 10:38:51

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分布式鎖工具

2023-09-09 12:23:24

函數式接口程序

2018-11-27 16:17:13

分布式Tomcat

2021-11-26 06:43:19

Java分布式

2023-09-22 08:00:00

分布式鎖Redis

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2023-08-21 19:10:34

Redis分布式

2022-01-06 10:58:07

Redis數據分布式鎖
點贊
收藏

51CTO技術棧公眾號

日韩久久久久久久久久久| 欧美在线播放一区| 精品无码久久久久成人漫画 | 欧美国产成人在线| 国产原创欧美精品| 日本一级淫片色费放| 无码少妇一区二区三区| 欧美军同video69gay| 日韩成人手机在线| 福利视频在线看| 国产一区二区三区综合| 97精品一区二区视频在线观看| 艳妇乳肉亭妇荡乳av| 亚洲精品成人图区| 亚洲精品中文在线影院| 欧美精品与人动性物交免费看| 国产精品高潮呻吟AV无码| 亚洲精选久久| zzijzzij亚洲日本成熟少妇| 欧美双性人妖o0| 全球中文成人在线| 欧美日韩在线视频一区二区| 亚洲成人动漫在线| 国产一区二区三区不卡在线| 国产v综合v亚洲欧| 国产精品伦子伦免费视频| 九九热精品免费视频| 欧洲杯半决赛直播| 日韩精品中文字| 亚洲一级片免费观看| av在线不卡精品| 亚洲va韩国va欧美va| 日本特级黄色大片| av电影在线观看网址| k8久久久一区二区三区 | 久久精品在这里| 国产精品一区二区三区在线| 91青青草视频| 麻豆9191精品国产| 97久久久久久| 国产精品成人久久| 欧美国产专区| 日韩视频免费在线| 人妻互换一区二区激情偷拍| 欧美猛男男男激情videos| 日韩成人中文字幕在线观看| 亚洲一二三四五| 精品视频一区二区三区| 欧美日韩国产一级| 国产九九热视频| 成人涩涩视频| 欧美日韩午夜在线| 中文字幕有码av| 99久久综合国产精品二区| 在线观看亚洲精品| 五月婷婷狠狠操| 在线看欧美视频| 欧美在线一二三| 日本成人中文字幕在线| 欧美日韩五区| 欧美午夜理伦三级在线观看| 一路向西2在线观看| aaaa欧美| 欧美美女一区二区三区| 中文字幕中文在线| 精品国产亚洲一区二区三区| 欧美一卡2卡3卡4卡| 中文字幕av一区二区三区人妻少妇| 成人av在线播放| 91精品国产综合久久久久久漫画| 免费黄频在线观看| 2020国产精品极品色在线观看| 精品噜噜噜噜久久久久久久久试看 | 阿v天堂2014| 日韩伦理视频| 超在线视频97| 日韩福利片在线观看| 亚洲一区图片| 国产美女久久精品香蕉69| 国产精品久久久久久免费免熟| 国产精品一区二区男女羞羞无遮挡| 91超碰在线免费观看| 亚洲欧洲精品视频| 久久精品免费在线观看| 午夜在线视频免费观看| 123区在线| 91久久精品一区二区二区| 色婷婷一区二区三区av免费看| 另类视频一区二区三区| 亚洲国产另类久久精品 | wwwwwxxxx日本| 免费精品一区| 日韩激情在线视频| 久久精品国产亚洲av久| 91精品亚洲| 97在线观看视频| 在线免费看91| 成人精品一区二区三区中文字幕| 欧美午夜精品久久久久久蜜| 色影院视频在线| 亚洲高清中文字幕| 97超碰成人在线| 视频小说一区二区| 久久精品国产欧美激情| 日韩毛片在线播放| 麻豆精品久久精品色综合| 国产精品一区二区a| 在线国产91| 精品福利在线看| 天美一区二区三区| 国产剧情一区| 高清欧美性猛交xxxx黑人猛交| 中文永久免费观看| www.一区二区| a级黄色片免费| 99re66热这里只有精品4| 精品国产制服丝袜高跟| 欧美日韩国产黄色| 国产精品一二| 国产91免费视频| 日本在线免费| 在线精品亚洲一区二区不卡| 中文字幕一区二区人妻电影丶| 久久精品欧美一区| 国产精品白丝jk喷水视频一区| 熟妇高潮一区二区高潮| 亚洲精品少妇30p| 91高清国产视频| 欧美精品一区二区三区中文字幕| 亚洲18私人小影院| 国产丰满果冻videossex| 亚洲国产精品精华液2区45| 自慰无码一区二区三区| 粉嫩久久久久久久极品| 欧美成人亚洲成人| 一区二区三区免费在线| 182在线播放| 久久机热这里只有精品| 亚洲精品一区国产| 自拍偷拍亚洲在线| 黄色片视频在线| 成人高清网站| 欧美色播在线播放| 尤物网站在线观看| 国产精品chinese| 91亚洲永久免费精品| 欧美成年黄网站色视频| 欧美日韩小视频| 成人无码精品1区2区3区免费看| 日韩精品成人一区二区三区| 欧美午夜精品理论片a级大开眼界| 手机在线观看av| 日韩精品极品在线观看| 日本熟女一区二区| 成人黄色大片在线观看| 国产欧美日韩小视频| 91麻豆精品激情在线观看最新| 久久综合久久八八| 精品国自产拍在线观看| 一区二区在线观看视频 | 欧美aa免费在线| 日韩av网站大全| 国产视频91在线| 97se亚洲国产综合自在线不卡| 亚洲 自拍 另类小说综合图区| 国内精品国产成人国产三级粉色 | 亚洲成人蜜桃| 四虎精品在线观看| 欧美日韩国产成人在线观看| 国精产品乱码一区一区三区四区| 午夜伊人狠狠久久| 制服 丝袜 综合 日韩 欧美| 美国十次了思思久久精品导航| 在线看成人av电影| 一区二区中文字幕在线观看| 欧美专区中文字幕| av资源在线观看免费高清| 91精品在线免费| 国产精久久久久久| 久久久精品日韩欧美| 日韩av片专区| 亚洲激精日韩激精欧美精品| 欧美日韩一区二区视频在线观看| 国产精品亚洲成在人线| 欧美成人午夜视频| 欧美男男激情freegay| 欧美日韩电影在线| 国产精彩视频在线观看| 国产女同性恋一区二区| 四川一级毛毛片| 国产美女诱惑一区二区| 一区二区三区国| 精品三级av| 国产精品视频久| 7777kkk亚洲综合欧美网站| 国产视频久久久久久久| 国产一区二区在线视频聊天| 亚洲成人www| 人妻无码一区二区三区免费| 成人性生交大片免费| 久久久精品三级| 国内揄拍国内精品久久| 手机看片福利永久国产日韩| 午夜视频在线观看精品中文| 国产成人一区三区| 黄网在线免费看| 深夜福利一区二区| 日本一区高清| 日韩一区二区免费视频| 蜜臀尤物一区二区三区直播| 一区二区免费在线| 国产精品久久久视频| 成人高清免费观看| 国产大片一区二区三区| 日韩福利视频导航| 欧美变态另类刺激| 综合久久婷婷| 在线观看欧美亚洲| 国产精品一区二区av交换| 激情小说网站亚洲综合网| 国产日本亚洲| 国产精品久久久久久五月尺| 亚洲优女在线| 国产+人+亚洲| 牛牛精品在线视频| 久久久av一区| 无遮挡动作视频在线观看免费入口| 日韩久久午夜影院| 黄色小视频免费在线观看| 51精品秘密在线观看| 欧美激情一区二区三区免费观看| 欧美视频不卡中文| 日韩精品成人在线| 一级日本不卡的影视| 欧美精品一区二区三区在线看午夜 | 欧美成人激情在线| 啊v视频在线| 亚洲欧美成人网| 色哟哟国产精品色哟哟| 日韩视频永久免费| 国产免费av观看| 欧美性一级生活| 日本丰满少妇做爰爽爽| 日韩欧美福利视频| 最新中文字幕一区| 欧美日韩色婷婷| 黄色大片网站在线观看| 欧美日韩性生活视频| 精品成人免费视频| 欧美日韩国产一区二区三区| 国产黄色片视频| 无码av中文一区二区三区桃花岛| 亚洲欧美在线视频免费| 五月激情丁香一区二区三区| 西西44rtwww国产精品| 亚洲成av人在线观看| 日韩精品成人在线| 色久优优欧美色久优优| www.av88| 欧美精品日韩一区| 精品国产18久久久久久| 精品久久久久久久久久久久久久久久久 | 人妻av一区二区| 高潮一区二区| 欧美做受69| 亚洲国产天堂久久综合网| 亚洲成人一二三区| 精品不卡在线视频| 性感美女福利视频| 亚洲人成伊人成综合网久久久| 黄色大片在线看| 最近2019中文字幕在线高清 | 亚洲成av人乱码色午夜| 国产91在线免费观看| 粉嫩绯色av一区二区在线观看| 亚洲精品久久一区二区三区777| www.欧美日韩国产在线| 免费看污片网站| 国产精品久久久久三级| 高清国产在线观看| 每日更新在线观看av| 视频在线一区| 一区二区久久久久| 精品人妻一区二区三区四区| 国产三级久久久| 污污的视频在线免费观看| 一区二区三区四区不卡在线| 日韩毛片在线视频| 亚洲成人综合网站| 欧美成人在线免费视频| 亚洲色图都市激情| 欧美巨大xxxx| 神马一区二区影院| 91精品国产91久久综合| 男人日女人视频网站| 天堂蜜桃91精品| 亚洲五月激情网| 岛国精品一区| 国产69精品久久久久777| 日韩午夜在线影院| 欧日韩一区二区三区| 大陆精大陆国产国语精品| 欧美凹凸一区二区三区视频| 国产精品久久久久9999赢消| 国产原创中文在线观看| 久久国产成人| 欧美性大战久久| 久久国产欧美精品| 精品中国亚洲| 亚洲 国产 欧美一区| 好看不卡的中文字幕| 亚洲国产成人va在线观看麻豆| 黄色网页在线播放| 久久亚洲在线| av观看久久| 精品大片一区二区| 国产九九九九九| 国产一区在线观看麻豆| 97人妻精品一区二区免费| 亚洲一区二区三区不卡国产欧美| 欧美激情一区二区三区免费观看 | 午夜激情一区二区| 国产污污视频在线观看| 欧美精品一卡两卡| 噜噜噜噜噜在线视频| 日韩电影在线免费| 欧美一区二区三区四区在线 | 国产成人高清激情视频在线观看| 日韩成人视屏| 在线成人性视频| 全国精品久久少妇| 蜜桃无码一区二区三区| 精品国产乱码久久久久久天美| www.色呦呦| 欧美成人激情图片网| 综合久久av| 国产性色av一区二区| 免费看毛片的网址| 亚洲男同gay网站| 欧美激情综合色| 久久人体av| 亚洲成人精品电影在线观看| 在线欧美三区| 福利视频久久| 一区二区中文| 中文字幕日韩久久| 最新国产成人在线观看| 97成人在线观看| www.亚洲男人天堂| 永久免费观看精品视频| 中文字幕日韩一区二区三区| 久久99热狠狠色一区二区| 国产大屁股喷水视频在线观看| 欧美片在线播放| 免费超碰在线| 亚洲综合色激情五月| 欧美视频导航| av黄色一级片| 色综合欧美在线| 国产理论电影在线观看| 国产精品视频专区| 久久久久免费av| 手机在线观看日韩av| 亚洲一区二区视频在线观看| 日韩在线视频第一页| 欧美一区二区三区图| 欧洲grand老妇人| 四虎成人在线播放| 亚洲成人高清在线| 欧美3p视频在线观看| 国产精品久久色| 久久久久久影院| 国产黑丝一区二区| 欧美亚洲综合色| 国产福利视频在线| 精品国产一区二区三区麻豆小说 | 成人av第一页| 国产成人无码一区二区三区在线| 亚洲精品日韩在线| 久久久久伊人| 久青草视频在线播放| 91网站视频在线观看| 精品国产青草久久久久96| 久久中文字幕在线| 亚洲第一福利社区| 久久久精品高清| 午夜精品123| 免费大片黄在线观看视频网站| 国产女主播一区二区| 日韩高清不卡一区| 亚洲国产精品午夜在线观看| 亚洲天堂av在线播放| 日韩中文字幕无砖| 国产第一页视频| 夜夜爽夜夜爽精品视频| 可以在线观看的黄色| 97视频资源在线观看| 免费在线观看精品| a v视频在线观看| 日韩在线观看免费|