Redisson实现分布式锁

Redisson 是一个基于 Redis 的 Java 客户端,它提供了许多高级功能,包括分布式锁。使用 Redisson 实现分布式锁非常简单。

1.添加依赖:首先,你需要在你的项目中添加 Redisson 的依赖。如果你使用的是 Maven,可以在 pom.xml 文件中添加以下依赖:

xml 复制代码
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.16.4</version> <!-- 请根据需要选择最新版本 -->
</dependency>

2.创建 Redisson 配置文件:创建一个名为 redisson.yml 的文件,并在其中配置 Redisson 的参数。

java 复制代码
redisson:
  config: |
    singleServerConfig:
      address: "redis://127.0.0.1:6379"
      connectionMinimumIdleSize: 11
      password: "yourpassword"
      database: 0

3.加载配置信息并创建 Redisson 客户端:在 Java 代码中,加载 redisson.yml 文件中的配置信息,并使用这些信息来创建 Redisson 客户端。

java 复制代码
import org.redisson.Redisson;
import org.redisson.api.RLock;
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;
import org.springframework.core.io.Resource;

import java.io.IOException;

@Configuration
public class RedissonConfig {

    @Value("classpath:redisson.yml")
    private Resource configFile;

    @Bean(destroyMethod = "shutdown")
    public RedissonClient redisson() throws IOException {
        Config config = Config.fromYAML(configFile.getInputStream());
        return Redisson.create(config);
    }
}

4.使用分布式锁:现在你可以使用 Redisson 提供的分布式锁了。

java 复制代码
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class DistributedLockService {

    @Autowired
    private RedissonClient redissonClient;

    public void performTaskWithLock() {
        RLock lock = redissonClient.getLock("myLock");

        try {
            // 尝试获取锁,等待时间为10秒,锁定时间为100秒
            if (lock.tryLock(10, 100, TimeUnit.SECONDS)) {
                try {
                    // 执行需要加锁的业务逻辑
                    System.out.println("Lock acquired, performing task...");
                    Thread.sleep(5000); // 模拟任务执行时间
                } finally {
                    lock.unlock(); // 确保在业务逻辑执行完毕后释放锁
                    System.out.println("Lock released");
                }
            } else {
                System.out.println("Failed to acquire lock");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

5.测试分布式锁:最后,你可以在你的应用程序中调用 DistributedLockService 来测试分布式锁的功能

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LockController {

    @Autowired
    private DistributedLockService distributedLockService;

    @GetMapping("/lock-task")
    public String lockTask() {
        distributedLockService.performTaskWithLock();
        return "Task executed with lock";
    }
}
相关推荐
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 分钟前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
Data跳动12 分钟前
Spark内存都消耗在哪里了?
大数据·分布式·spark
Java程序之猿2 小时前
微服务分布式(一、项目初始化)
分布式·微服务·架构
来一杯龙舌兰2 小时前
【RabbitMQ】RabbitMQ保证消息不丢失的N种策略的思想总结
分布式·rabbitmq·ruby·持久化·ack·消息确认
AskHarries2 小时前
Spring Cloud OpenFeign快速入门demo
spring boot·后端
isolusion3 小时前
Springboot的创建方式
java·spring boot·后端
Yvemil74 小时前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
节点。csn4 小时前
Hadoop yarn安装
大数据·hadoop·分布式
星河梦瑾5 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
NiNg_1_2345 小时前
基于Hadoop的数据清洗
大数据·hadoop·分布式