Redission分布式锁

2022-07-05  本文已影响0人  CoderInsight

1,基本使用示例

使用Redission对业务的核心处理方法进行加锁处理;

(1),引入依赖

<!--分布式锁-->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.6.5</version>
</dependency>

(2),创建配置类

package com.zz.card.config;

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;


/**
 * @author wangyongqiang
 */
@Configuration
public class RedissonConfig {
 
    @Value("${spring.redis.host}")
    private String host;
 
    @Value("${spring.redis.port}")
    private String port;
 
    @Value("${spring.redis.password}")
    private String password;
 
    @Bean
    public RedissonClient getRedisson(){
 
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password);
        /// 添加主从配置(暂时使用的单节点的,未做配置,故未生效)
        // config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""});
        return Redisson.create(config);
    }
}

(3),给核心方法进行加锁的操作

因为整个业务是核心,不要管是否很长,重点是他们是一个业务主体,而不是单个独立的业务。

// 注入依赖
@Autowired
private RedissonClient redissonClient;
// 针对整个方法整体添加,也就是说针对当前整个业务核心添加
Result<?> result = new Result<>();
// 指定锁的名字
RLock rlock = redissonClient.getLock("redisson:lock:total");
try {
    // lock
    rlock.lock(20, TimeUnit.SECONDS);
    // 核心业务方法
    result = xxxService.doXxx(param01, param02);
}catch (Exception e){
    log.error("出现锁异常!\n{}", e.getMessage());
}finally {
    // unlock
    rlock.unlock();
}
return result;

2,关于分布式锁的原理剖析

(1),lock与trylock的区别

上一篇下一篇

猜你喜欢

热点阅读