redission分布式锁防止重复初始化问题
配置地址:
redisson:
#Redis服务地址如果集群使用","进行分割
server-address:redis://${spring.redis.host}:${spring.redis.port}
database:${spring.redis.database}
创建配置类:
@ConfigurationProperties(prefix="redisson")
@Configuration
publicclassRedissonConfig{
/**Redis服务地址如果集群使用","进行分割*/
privateStringserverAddress;
privateIntegerdatabase;
publicStringgetServerAddress(){
returnserverAddress;
}
publicvoidsetServerAddress(StringserverAddresss){
this.serverAddress=serverAddresss;
}
publicIntegergetDatabase(){
returndatabase;
}
publicvoidsetDatabase(Integerdatabase){
this.database=database;
}
}
注册redissionBean:
/**
*RedissonClient
*@return
*/
@Bean
publicRedissonClientredissonClient(){
StringsplitChar=",";
StringserverAddress=redissonConfig.getServerAddress();
String[]serverAddressArr=serverAddress.split(splitChar);
Configconfig=newConfig();
if(serverAddressArr.length==1){
//单例redis
config.useSingleServer()
.setAddress(redissonConfig.getServerAddress())
.setDatabase(redissonConfig.getDatabase());
}else{
//集群redis
config.useClusterServers().addNodeAddress(serverAddressArr);
}
returnRedisson.create(config);
}
防止重复初始化:
**
*初始化告警统计记录保证告警统计不会被重复初始化
*
*@paramareaId部门id
*@throwsBizException
*/
publicvoidinitWarningStatisticsSafe(StringareaId)throwsBizException{
//创建锁名称
StringlockName=generateInitWarningStatisticsLockName(areaId);
RLocklock=redisClient.getLock(lockName);
try{
//尝试获取锁(最多尝试10秒,获取到后15秒后释放锁)
booleanisAcquireLock=lock.tryLock(10,15,TimeUnit.SECONDS);
if(!isAcquireLock){
logger.error("初始化消息统计---获取锁失败lockName="+lockName);
thrownewBizException("系统异常");
}else{
try{
//查询【告警统计】(能够查询到最新的数据,因为默认隔离级别是readcommitted
ListwarningStatisticsPOS=warningStatisticsDAO.selectByArea(areaId);
if(CollectionUtils.isEmpty(warningStatisticsPOS)){
//如果部门不存在告警统计,才进行初始化initWarningStatistics()会开启一个新事务
warningStatisticsService.initWarningStatistics(areaId);
}
}finally{
//释放锁(在事务提交后才释放锁。保证其它事务在获取锁后能查询到数据,不会再进行初始化。)
lock.unlock();
}
}
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
到此这篇关于redission分布式锁防止重复初始化问题的文章就介绍到这了,更多相关redission分布式锁内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!