zoukankan      html  css  js  c++  java
  • Redisson和spring-integration-redis 分布式锁

    Redisson

    方式1

    引入依赖

    <!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson</artifactId>
        <version>3.15.1</version>
    </dependency>

    配置文件application.properties

    # 自定义配置
    redisson.url=redis://127.0.0.1:6379

    配置类

    import org.redisson.Redisson;
    import org.redisson.api.RedissonClient;
    import org.redisson.config.Config;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class RedissonConfig {
    
        @Value("${redisson.url}")
        private String redisUrl;
    
        @Bean
        public RedissonClient getRedissonClient(){
            Config config = new Config();
            config.useSingleServer().setAddress(redisUrl);
            return Redisson.create(config);
        }
    }

    使用

    import org.redisson.api.RLock;
    import org.redisson.api.RedissonClient;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class DemoService {
    
        @Autowired
        private RedissonClient redissonClient;
    
        public void doSomething(){
            RLock lock = redissonClient.getLock("lock_key");
    
            try {
                lock.lock();
                // TODO 业务逻辑
    
            } finally {
                lock.unlock();
            }
    
        }
    
    }

    方式2:

    依赖

    <!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson-spring-boot-starter</artifactId>
        <version>3.15.1</version>
    </dependency>

    配置文件application.properties(这种方式完全兼容SpringBoot配置)

    spring.redis.host=127.0.0.1
    spring.redis.port=6379

    使用

    import org.redisson.api.RLock;
    import org.redisson.api.RedissonClient;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class DemoService {
    
        @Autowired
        private RedissonClient redissonClient;
    
        public void doSomething(){
            RLock lock = redissonClient.getLock("lock_key");
    
            try {
                lock.lock();
                // TODO 业务逻辑
    
            } finally {
                lock.unlock();
            }
    
        }
    
    }

    spring-integration-redis

    依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <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>

    配置文件application.properties

    spring.redis.host=127.0.0.1
    spring.redis.port=6379

    配置类

    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, "registry_key");
        }
    
    }

    使用

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.integration.redis.util.RedisLockRegistry;
    import org.springframework.stereotype.Service;
    
    import java.util.concurrent.locks.Lock;
    
    @Service
    public class DemoService {
    
        @Autowired
        private RedisLockRegistry redisLockRegistry;
    
        public void doSomething(){
            Lock lock = redisLockRegistry.obtain("lock_key");
    
            try {
                lock.lock();
                // TODO 业务逻辑
                
            } finally {
                lock.unlock();
            }
        }
    }
    小LUA 面对敌人的严刑逼供,我一个字也没说,而是一五一十写了下来。
  • 相关阅读:
    Webpack4 入门手册(共 18 章)下
    npm(Node Package Manager)
    C#(99):C# 5.0 新特性(.NET Framework 4.5 与 Visual Studio 2012 )
    C#(99):四、Async和Await使异步编程更简单
    C#(99):三、.NET 4.0基于任务的异步模式(TAP),推荐使用
    C#(99):二、.NET 2.0基于事件的异步编程模式(EAP)
    C#(99):一、.NET 1.0 异步编程模型(APM)
    VS中的代码段功能
    VS在C#类文件头部添加文件注释的方法
    C#(99):C# 语言历史版本特性(C# 1.0到C# 8.0汇总)
  • 原文地址:https://www.cnblogs.com/LUA123/p/14516530.html
Copyright © 2011-2022 走看看