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();
}
}