欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

redission分布式锁

程序员文章站 2024-01-05 10:45:04
...

- 先引用pom依赖

<dependency>
   <groupId>org.redisson</groupId>
   <artifactId>redisson-spring-boot-starter</artifactId>
   <version>3.9.1</version>
</dependency>

- 在加入yml文件

singleServerConfig:
  #连接空闲超时,单位:毫秒
  idleConnectionTimeout: 10000
  pingTimeout: 1000
  #连接超时,单位:毫秒
  connectTimeout: 10000
  #命令等待超时,单位:毫秒
  timeout: 3000
  #命令失败重试次数
  retryAttempts: 3
  #命令重试发送时间间隔,单位:毫秒
  retryInterval: 1500
  #重新连接时间间隔,单位:毫秒
  reconnectionTimeout: 3000
  #执行失败最大次数
  failedAttempts: 3
  #单个连接最大订阅数量
  subscriptionsPerConnection: 5
  #客户端名称
  clientName: null
  #地址
  address: "redis://你的redis地址"
  #数据库编号
  database: 0
  #密码
  password: redis密码
  #发布和订阅连接的最小空闲连接数
  subscriptionConnectionMinimumIdleSize: 1
  #发布和订阅连接池大小
  subscriptionConnectionPoolSize: 50
  #最小空闲连接数
  connectionMinimumIdleSize: 32
  #连接池大小
  connectionPoolSize: 64
  #是否启用DNS监测
#  dnsMonitoring: false
  #DNS监测时间间隔,单位:毫秒
  dnsMonitoringInterval: 5000
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.JsonJacksonCodec> {}
transportMode : "NIO"
  • 再建立config配置
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;

import java.io.IOException;

/**
 *
 * 功能描述: 分布式锁配置类
 *  * @param:
 * @return:
 * @auther: mamengkai
 * @date: 2018-12-20 11:26
 */
@Configuration
public class RedissonConfig {
    @Bean
    public RedissonClient redisson() throws IOException {
        // 使用的是yaml格式的配置文件,读取使用Config.fromYAML,如果是Json文件,则使用Config.fromJSON
        Config config = Config.fromYAML(RedissonConfig.class.getClassLoader().getResource("redisson.yml"));
        return Redisson.create(config);
    }
}
  • 最后应用在业务
/**
 *
 * 功能描述: 积分划转
 *
 * @param: [taferIntegralOutId, taferIntegralInId, integralBalance]
 * 转出方Id,转入方Id,转入积分数量
 * @return: com.gongshi.web.citic.common.util.ReturnData
 * @auther: mamengkai
 * @date: 2018-12-05 18:14
 */
@PostMapping("/member/taferIntegral")
public ReturnData taferIntegral(String traferOutId,String traferInId,  Long integralBalance, @RequestParam("data") String data){
   Map object = JSONObject.parseObject(data);
   traferOutId = object.get("traferOutId").toString();
   traferInId = object.get("traferInId").toString();
   integralBalance = Long.valueOf( object.get("integralBalance").toString());
   DealIntegralPojo dealIntegralPojo = new DealIntegralPojo();
   //获得分布式锁
   RLock lock =redisson.getLock("taferIntegral");
   //开始对积分转账进行加锁
   lock.lock();
   try{
      -------你的业务逻辑

   }catch (Exception e){
      e.printStackTrace();
      return ReturnData.error(Constant.SYSTEM_ERROR_CODE);

   }finally{
      lock.unlock();
   }
}

上一篇:

下一篇: