精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产婷婷视频在线| 久草视频在线资源站| 蜜桃视频成人m3u8| 国产精品国产三级国产| 亚洲最大的网站| 日产精品久久久| 国产精品毛片久久| 亚洲国产精品久久久久秋霞蜜臀 | 欧美午夜黄色| 69堂免费精品视频在线播放| 国产精品国产三级国产三级人妇 | 国产精品视频无码| 亚洲国产专区校园欧美| 国产亚洲精品日韩| 久久久999精品视频| 日本不卡在线播放| av观看在线免费| 午夜在线a亚洲v天堂网2018| www.亚洲免费视频| 国产激情第一页| 永久av在线| 成人黄色在线看| 国产精品美女主播在线观看纯欲| 久久久久黄色片| 精品久久电影| 精品国产乱码久久| 三级网在线观看| 丝袜视频国产在线播放| 激情欧美丁香| 中文字幕精品av| 日韩av手机在线播放| 在线视频成人| 日韩欧美aⅴ综合网站发布| 中文字幕色一区二区| 国产综合av一区二区三区| 69av.com| 999精品视频| 亚洲人成免费电影| av在线播放网址| 欧美视频精品全部免费观看| 综合中文字幕亚洲| 欧美精品尤物在线| 天堂网免费视频| 国产精品av久久久久久麻豆网| 国产亚洲精品久久久久动| 久久久久亚洲AV成人无码国产| 中文字幕综合| 欧美日韩一卡二卡| 国产精品亚洲二区在线观看| 美女高潮视频在线看| 亚洲美女一区二区三区| 伊人久久大香线蕉av一区| 国产高清视频在线| 国产精品伦理久久久久久| 成熟亚洲日本毛茸茸凸凹| 国产欧美精品一区二区| 日韩电影在线观看一区二区| 亚洲综合好骚| 欧美一级淫片播放口| 日韩黄色a级片| 亚洲精品黄色| 91国内产香蕉| 奇米影视第四色777| 亚洲无线一线二线三线区别av| 欧美巨猛xxxx猛交黑人97人| 91在线播放观看| 午夜欧美精品久久久久久久| 美女性感视频久久久| 全网免费在线播放视频入口| 91成人观看| 欧美成人免费一级人片100| 男女性高潮免费网站| 亚洲区综合中文字幕日日| 久久影院在线观看| 久久久在线免费观看| 中文字幕avav| 亚洲国产aⅴ精品一区二区| 欧美一区在线视频| 丰满饥渴老女人hd| 国产suv精品一区二区四区视频| 精品日本一线二线三线不卡| 涩视频在线观看| 美女av在线播放| 亚洲视频在线一区| 欧美狂野激情性xxxx在线观| 国产精品原创| 欧美在线观看视频一区二区 | 色一区二区三区| 日韩欧美亚洲成人| 久久撸在线视频| 欧美性video| 亚洲一区电影777| 亚洲成va人在线观看| 日产日韩在线亚洲欧美| 中文无码av一区二区三区| 精油按摩中文字幕久久| 91观看网站| 少妇性bbb搡bbb爽爽爽欧美| 欧美国产精品一区二区| youjizz.com亚洲| av免费不卡国产观看| 黄网动漫久久久| 91看片在线免费观看| 日本免费精品| 日韩高清a**址| 中文字幕电影av| 亚洲国产欧美日韩在线观看第一区| 亚洲人成啪啪网站| 久草免费在线观看视频| 石原莉奈在线亚洲三区| 147欧美人体大胆444| 三级av在线播放| 亚洲免费观看高清完整版在线| 国产成人一区二区三区| www.亚洲自拍| 美女网站一区| 欧美国产日韩xxxxx| 亚洲天堂视频在线播放| 国产精品视区| 97久久精品在线| 91中文字幕在线播放| 91免费看`日韩一区二区| 精品国产91亚洲一区二区三区www| 成人免费高清在线播放| 午夜精品福利一区二区蜜股av| 黄色一级片免费的| 精品国产精品国产偷麻豆| 久久久久一本一区二区青青蜜月 | 777亚洲妇女| 免费看黄色的视频| 亚洲色图丝袜| 欧美精品成人在线| 99产精品成人啪免费网站| 欧美国产日本视频| av免费中文字幕| 亚洲熟妇无码av| 国产成人精品亚洲线观看| 最好看的2019的中文字幕视频| 国产欧美日韩另类| 国产黑丝在线一区二区三区| 亚洲一区二区三区涩| 欧美freesex| 在线观看www91| 国产偷人妻精品一区| 日韩有码一区| 欧美国产在线电影| 国产免费视频一区二区三区| 国产精品免费久久| 999精彩视频| 精品久久久久中文字幕小说| 日本高清+成人网在线观看| 少妇精品高潮欲妇又嫩中文字幕| 亚洲免费资源在线播放| theporn国产精品| 欧美激情另类| 91精品视频免费| 欧美尤物美女在线| 欧美久久高跟鞋激| 日韩女优视频免费观看| 三区视频在线观看| 99久久精品国产亚洲精品| 国产精品偷伦免费视频观看的| 国产女人在线视频| 欧美性欧美巨大黑白大战| 欧美午夜激情影院| 蜜桃av一区二区三区电影| 亚洲精蜜桃久在线| 国产精品亚洲欧美一级在线| 久热在线中文字幕色999舞| 99热这里只有精| 一区二区三区欧美激情| 欧洲成人午夜精品无码区久久| 欧美在线二区| 国产乱码一区| 欧美一级大片| 日韩中文字幕在线精品| 精品国产一级片| 午夜精品福利一区二区三区蜜桃| 亚洲精品成人无码熟妇在线| 免费成人小视频| 国产日韩欧美大片| 国产91精品入| 精品福利久久久| 久久久久久久久久久免费 | 国产av不卡一区二区| 精品视频成人| 91国偷自产一区二区三区的观看方式| 三级视频网站在线| 欧美日韩夫妻久久| 国产一级一片免费播放放a| 久久久一区二区| 中文字幕一区二区在线观看视频| 韩国久久久久| 日韩在线导航| 午夜影院免费在线| 日韩av在线网页| 日本视频www色| 夜夜嗨av一区二区三区网页| 无码熟妇人妻av| 精品一区二区三区免费毛片爱| 97在线国产视频| 精品久久一区| 国产日韩三区| 日韩成人在线一区| 极品美女销魂一区二区三区免费 | 亚洲国产精品午夜在线观看| 国产日韩综合av| 国产人妻精品午夜福利免费| 日韩高清在线电影| 337p亚洲精品色噜噜狠狠p| 国产日本久久| 中文字幕日韩av电影| 性色av蜜臀av| 欧美午夜不卡在线观看免费| 日韩免费黄色片| 亚洲日本护士毛茸茸| 在线免费观看成年人视频| 国产精品911| 一区二区三区韩国| 国产一区二区你懂的| 特级西西人体www高清大胆| 欧美日韩中字| 久久99精品久久久久久三级 | 激情小说综合网| 精品一区91| 国产精品一二三在线| 不卡一二三区| 午夜精品三级视频福利| 成人在线播放| 最近2019中文字幕第三页视频| 日韩美女一级视频| 亚洲福利在线视频| 久久精品免费av| 亚洲欧洲av色图| 亚洲一二三精品| 久久精品在线观看| 一级国产黄色片| 成人白浆超碰人人人人| 国产伦理在线观看| 国产一区二区在线免费观看| 色播五月激情五月| 久久精品国产亚洲aⅴ| 日韩无套无码精品| 日韩经典中文字幕一区| 成人免费毛片网| 亚洲一区二区伦理| 18禁免费无码无遮挡不卡网站| 精品动漫av| 我的公把我弄高潮了视频| 影音先锋中文字幕一区| 中国丰满熟妇xxxx性| 国精品一区二区三区| 乱熟女高潮一区二区在线| 欧美日韩精品免费观看视频完整| 欧美 国产 精品| 国产精品hd| 黄色成人在线播放| 精品视频在线观看免费| 一区二区三区色| 国产亚洲第一页| 五月天激情综合| 日韩少妇高潮抽搐| 欧美性xxxx极品高清hd直播| 影音先锋在线国产| 在线观看视频一区二区| 亚洲无码精品在线播放| 欧美一卡二卡三卡| 亚洲欧美另类综合| 日韩国产欧美区| 北岛玲一区二区三区| 久久精品国产91精品亚洲| 精品麻豆一区二区三区| 久久99久国产精品黄毛片入口| 98色花堂精品视频在线观看| 2019国产精品自在线拍国产不卡| 欧美成人精品一区二区男人小说| 国产成人免费av| 亚洲免费资源| 国产精品久久久久久久小唯西川| 久久人人爽人人爽人人片av不| 欧美性xxxx69| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 久久久人人人| 亚洲japanese制服美女| 99久久久无码国产精品衣服| 久久蜜桃av一区精品变态类天堂 | 一区二区三区网站| 久久久久久人妻一区二区三区| 久久婷婷亚洲| 日本人dh亚洲人ⅹxx| 99免费精品在线| 日韩精品久久久久久久的张开腿让| 一区二区高清视频在线观看| 性色av免费观看| 欧美一区二区三区免费视频| 欧美另类自拍| 日韩欧美成人一区| 青青草超碰在线| 欧美成年人在线观看| 黑人巨大精品| 97久久人人超碰caoprom欧美| 无码日韩精品一区二区免费| 国产精品久久成人免费观看| 日韩久久视频| 国产日韩欧美精品在线观看| 免费在线成人网| 欧美肉大捧一进一出免费视频 | 国产极品在线播放| 免费观看成人av| 成人激情黄色网| 久草在线资源福利站| 国产精品免费久久久| 78精品国产综合久久香蕉| 成人区精品一区二区| 色综合久久网| 黄色大片在线免费看| 国产精品成久久久久| 国产自产在线视频| 老司机午夜精品| av网站免费在线看| 一个色妞综合视频在线观看| 国产无套粉嫩白浆内谢| 欧美一区二区在线播放| 欧美孕妇性xxxⅹ精品hd| 久久久亚洲成人| 亚洲一区导航| 免费99视频| 一区二区三区导航| 在线视频一二区| 国产精品美女久久久久久久久久久| 日本少妇毛茸茸高潮| 欧美日韩国产片| 福利在线观看| 91国产精品电影| 国产高清日韩| 亚洲高清123| 午夜亚洲视频| 亚洲精品女人久久久| 亚洲影院理伦片| 蜜桃av久久久亚洲精品| 2021年精品国产福利在线| 亚洲视频精品一区| 首页国产欧美日韩丝袜| 日韩精品人妻中文字幕有码| 伊人色综合久久天天| 亚洲成人久久精品| 精品国产欧美一区二区三区成人| 国产a亚洲精品| 日本一区免费观看| 在线欧美不卡| aaa黄色大片| 亚洲在线中文字幕| 囯产精品久久久久久| 九九精品视频在线观看| 91久久精品无嫩草影院| 麻豆中文字幕在线观看| 性感少妇一区| av黄色在线免费观看| 在线日韩一区二区| 97在线观看免费观看高清| 国产成人精品免费视频| 欧美成人激情| 中文av字幕在线观看| 亚洲婷婷国产精品电影人久久| 国产喷水福利在线视频| 久久精品成人欧美大片古装| 日韩一区二区三区精品| 久久久久福利视频| 99精品在线免费| 日日夜夜综合网| 亚洲欧美一区二区三区在线| 日本精品在线中文字幕| 成人av在线网站| 九九九久久久久| 日韩欧美国产高清| 91一区二区三区在线| 7777精品久久久大香线蕉小说| 综合久久亚洲| 亚洲精品乱码久久久久久久| 日本韩国欧美一区| 99国产精品一区二区三区| 久久精品国产清自在天天线| 亚洲电影二区| 你真棒插曲来救救我在线观看| thepron国产精品| 日批视频免费观看| 久久艳片www.17c.com| 另类尿喷潮videofree| 免费无码国产v片在线观看| 97超碰欧美中文字幕| 在线观看中文字幕码| 米奇精品一区二区三区在线观看| 欧美一区自拍| 成人午夜激情av| 亚洲午夜精品网| 九色蝌蚪在线| 97超碰在线播放| 久久精品日产第一区二区| 久久久久久久久久网站| 日韩电影中文字幕av|