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 面对敌人的严刑逼供,我一个字也没说,而是一五一十写了下来。
原文地址:https://www.cnblogs.com/LUA123/p/14516530.html