赞
踩
使用Redis的自增长功能来生成一个比上一个编码+1的新编码,同时使用synchroiniezd来解决并发问题,并考虑Redis宕机和Key过期时缓存重构的问题
同时这段代码具有通用性,可以为这一系列问题提供解决思路
- //处理并发
- private synchronized String codeGenerate(String codeRedisKey,String codePrefix) {
- Long num = 0L;
- Object value = redisTemplate.opsForValue().get(codeRedisKey);
-
- if (value == null) {
- //如果key因为过期 宕机等问题时需要取最大值来重构缓存
- String maxCode = getBaseMapper().selectMaxCode();
- if (StringUtils.isNotBlank(maxCode)) {
- num = Long.parseLong(maxCode.substring(codePrefix.length()));
- }
- redisTemplate.opsForValue().set(codeRedisKey, num, 1, TimeUnit.DAYS);
- }
-
- // redis自增长
- num = redisTemplate.opsForValue().increment(codeRedisKey);
-
- String index = String.format("%06d", num);
- return codePrefix + index;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。