package com.iden.common.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.iden.common.cache.RedisKeyConstant; import com.iden.common.cache.RedisUtil; import com.iden.common.entity.IdenAutoincKey; import com.iden.common.mapper.IdenAutoincrKeyMapper; import com.iden.common.service.IdenAutoincrKeyService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.UUID; /** * (IdenAutoincrKey)表服务实现类 * * @author makejava * @since 2021-12-30 19:06:40 */ @Service public class IdenAutoincrKeyServiceImpl extends ServiceImpl implements IdenAutoincrKeyService { @Resource private RedisUtil redisUtil; public Long updateMaxValue(String keyFlag){ String localKey = RedisKeyConstant.UID_KEY; if("vuid".equals(keyFlag)){ localKey = RedisKeyConstant.VUID_KEY; } String requestId = UUID.randomUUID().toString(); boolean result = redisUtil.tryLock(localKey,requestId, 3); Long maxValue = null; try { if (result) { maxValue = this.baseMapper.updateMaxValue(keyFlag); } else { Thread.sleep(1000); return updateMaxValue(keyFlag); } } catch (Exception e) { e.getMessage(); } finally { redisUtil.releaseLock(localKey,requestId); } return maxValue; } }