废话不多说上代码~
@Resource
private StringRedisTemplate stringRedisTemplate;
private String generateCode() {
String sourceCode = mdmAssetCard.getSourceCode();
String prefix = BcTypeEnum.getValueByName("AAA");
String redisKey = RedisConstants.FSSC_CODE_KEY;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, NumberConstants.TWENTY_THREE);
calendar.set(Calendar.MINUTE, NumberConstants.FIFTY_NINE);
calendar.set(Calendar.SECOND, NumberConstants.FIFTY_NINE);
calendar.set(Calendar.MILLISECOND, NumberConstants.NINE_HUNDRED_AND_NINETY_NINE);
RedisAtomicLong counter = new RedisAtomicLong(redisKey, stringRedisTemplate.getConnectionFactory());
//数据清零
counter.expire(0, TimeUnit.MILLISECONDS);
Long increment = counter.incrementAndGet();
String sequence = StringUtils.leftPad(increment.toString(), NumberConstants.SIX, String.valueOf(NumberConstants.ZERO));
StringBuilder code = new StringBuilder(sourceCode);
if (StringUtils.isNotBlank(prefix)) {
code.append(prefix);
}
code.append(sequence);
return code.toString();
}

本文介绍了如何使用Spring RedisTemplate实现一个自动生成带有前缀的六位代码,通过Redis原子操作确保每次生成的序列号唯一,并在每天凌晨自动清零。
2953

被折叠的 条评论
为什么被折叠?



