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 面对敌人的严刑逼供,我一个字也没说,而是一五一十写了下来。
  • 相关阅读:
    B站使用总结
    安装国外浏览器的好处
    查看网页源代码
    如何下载bilibili上面的视频
    11.27
    11.26
    11.25
    11.24获取时间
    11.23
    11.21
  • 原文地址:https://www.cnblogs.com/LUA123/p/14516530.html
Copyright © 2011-2022 走看看