integration+redis实现分布式锁

本章节基于前面的integration来配置分布式锁

详细请看前面文章链接

integration实现本地全局锁

下面使用integration+redis实现分布式锁

前面无论是注解形式还是声明式的形式,都使用了本地锁

@SpringBootConfiguration
@Slf4j
public class LocalLockConfig {

    /**
     * 配置本地锁z
     * @return
     */

    @Bean
    public LockRegistry localLockRegistry(){
        LockRegistry lockRegistry = new DefaultLockRegistry();
        log.info("the local lock is loaded successfully!");
        return lockRegistry;
    }
}

那么我们在新模块中,只需要重写这个锁就可以实现其他锁,比如实现redis的分布式锁

如下图,前面为本地锁,下面为redis分布式锁

依赖如下


    <dependencies>
        <dependency>
            <groupId>com.imooc.pan</groupId>
            <artifactId>lock-core</artifactId>
            <version>1.0</version>
        </dependency>


        <dependency>
            <!-- spring integration与redis结合,实现redis分布式锁 -->
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

首先进行锁的配置,配置redis的分布式锁

  • integrationGroupKey:这是分布式锁的组名称。在 RedisLockRegistry 中,锁的名称是由该组名称和锁的名字组合而成的。这样可以在 Redis 中更好地组织锁的存储结构,以便于管理和查找。
  • expireAfter:这是分布式锁的持有时间,即锁的过期时间。在 Redis 中,锁可以设置一个过期时间,以防止锁被长时间持有而导致死锁或其他问题。这里的时间单位是毫秒。
@Configuration
public class RedisLockConfiguration {

    private static final String integrationGroupKey = LockConstants.R_PAN_LOCK;//分布式锁的组名称

    private static final long expireAfter = 10L * 1000L ;//分布式锁持有时间


    @Bean
    public LockRegistry redisLockRegistry(RedisConnectionFactory redisConnectionFactory){
        return new RedisLockRegistry(redisConnectionFactory, LockConstants.R_PAN_LOCK,expireAfter);
    }

后面使用到的话把拥有这个类中bean的类注入到业务模块去,业务模块使用父类接口 private LockRegistry lockRegistry接收,这样子就可以实现不同需要的锁实现,只需要注入不同的依赖的好了(比如本地锁在一个模块,redis分布式锁在一个模块)

接下来我在我的业务模块注入redis分布式锁模块的依赖

接着在对应的业务模块上面使用注解形式的方法加锁(分布式锁),替换之前的synchronized

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值