1. Java | 使用 Spring Redis Lock 實(shí)現(xiàn)分布式鎖

        共 2414字,需瀏覽 5分鐘

         ·

        2021-06-07 08:38

         Spring Redis Lock 配置

        Table of Contents

        前言使用步驟1. 引入庫2. 配置 redis3. 增加配置4. 使用

        前言

        在我們項(xiàng)目經(jīng)常遇到并發(fā)問題,在單個(gè)項(xiàng)目中,使用自帶的鎖即可完成并發(fā)控制,在多個(gè)項(xiàng)目中,就需要使用分布式鎖來解決。這里講一下使用 Redis 來做分布式鎖實(shí)現(xiàn)方案

        使用步驟

        1. 引入庫

        在 Spring Boot 項(xiàng)目會(huì)根據(jù) Spring Boot 依賴管理自動(dòng)配置版本號

        Maven

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

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

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

        2. 配置 redis

        application-xxx.yml 中配置

        spring:
          redis:
            host: 127.0.0.1
            port: 6379
            timeout: 2500
            password: xxxxx

        3. 增加配置

        RedisLockConfig.java

        import java.util.concurrent.TimeUnit;
        import org.springframework.context.annotation.Bean;
        import org.springframework.context.annotation.Configuration;
        import org.springframework.data.redis.connection.RedisConnectionFactory;
        import org.springframework.integration.redis.util.RedisLockRegistry;

        @Configuration
        public class RedisLockConfig {

          @Bean
          public RedisLockRegistry redisLockRegistry(RedisConnectionFactory redisConnectionFactory) {
            return new RedisLockRegistry(redisConnectionFactory, "redis-lock",
                TimeUnit.MINUTES.toMillis(10));
          }
        }

        4. 使用

        @Autowired
        private RedisLockRegistry lockRegistry;

        Lock lock = lockRegistry.obtain(key);
        boolean locked = false;
        try {
          locked = lock.tryLock();
          if (!locked) {
            // 沒有獲取到鎖的邏輯    
          }

          // 獲取鎖的邏輯
        finally {
          // 一定要解鎖
          if (locked) {
            lock.unlock();
          }
        }


        瀏覽 79
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 双女主电影大尺度日剧她 | 久久久久亚洲 | 日韩视频-熊猫成人网 | 久久婷婷视频 | 日本一区不卡视频 |