一个注解实现分布式锁加锁

目录

一、概述

二、代码的实现

1、引入依赖

2、配置Redisson

3、定义注解

4、添加aop的切面方法

5、 支持 SpEL 表达式

三、代码验证

四、总结


一、概述

     在微服务项目的开发进程中,分布式锁的应用场景屡见不鲜。此时,我们需要借助分布式组件来实现,常见的分布式组件包括 Redis、Zookeeper、Etcd 等。然而,结合实际业务状况分析,通常会优先选择 Redis,原因在于 Redis 往往是微服务系统的必备组件,无需另行搭建。而在其中,我们常常运用基于 Redis 实现的 Java 分布式对象存储和缓存框架 Redisson 来达成分布式锁的功能。

        在通过 Redisson 实现分布式锁时,我们都得编写如下代码。但这样一来,每次使用都要书写这些代码,不仅麻烦(主要是因为懒),代码重复率高,而且加分布式锁的代码和业务代码相互耦合。鉴于此,我采用了 Spring 中的注解与 AOP 方式,以实现代码复用,进而简化分布式锁的加锁与解锁流程。

public void process() {
    RLock lock = redissonClient.getKey(key);
    try{
        if(lock.tryLock()){
            //执行自己的业务逻辑
        }
    } finally {
        if(lock.isHeldByCurrentThread()){
            lock.unlock();
        }
    }
}

        优化之后,代码的调用方式如下,这极大地简化了分布式锁的使用。

@DistributedLock(key = "process")
public void process() {
    // 具体的业务逻辑
}

二、代码的实现

1、引入依赖

        首先,我们需要导入以下依赖:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.8.14.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>2.15.2</version>
</dependency>


2、配置Redisson

      新建一个 RedissonConfig.java 文件,代码如下:

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class RedissonConfig {
 
    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer()
        //这里配置你redis的地址
        .setAddress("redis://127.0.0.1:6379");
        // 如果有密码
        .setPassword("xxxx");
      &nb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知北游z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值