天天快资讯丨单号生成器

2022-09-20 09:16:34来源:互联网  

##RedisTemplate单号生成器

描述

因为redis是线程安全的,所以可以用redis作为单号生成器


(资料图)

代码如下

/**

@author gxp

@description 单号生成器

@date 2018/8/31 10:45
*/
public class OrderNoUtil {

private static RedisTemplate<String, Object> redisTemplate;

static {
if (null == redisTemplate) {
redisTemplate = SpringContextExt.getBean(“redisTemplate”, RedisTemplate.class);
}
}

/**

单号长度
*/
private static int NO_LENGTH = 3;

/**

获取单号 带日期 每天重置 key+20200821001@param key@return
*/
public static String createAutoID(String key) {
//加上时间戳 如果不需要
String datetime = new SimpleDateFormat(“yyyyMMdd”).format(new Date());
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue().increment(key + datetime, 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPad(String.valueOf(autoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
String code = MessageFormat.format("{0}{1}", key + datetime,value);
//设置三天过期
redisTemplate.expire(key + datetime, 3, TimeUnit.DAYS);
return code;
}

/**

永远不过期 20200821002@param key@return
*/
public static String createAutoIDNoExpire(String key) {
//加上时间戳 如果不需要
String datetime = new SimpleDateFormat(“yyyyMMdd”).format(new Date());
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue().increment(key + datetime, 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPad(String.valueOf(autoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
String code = MessageFormat.format("{0}{1}", key + datetime,value);
return code;
}

/**

获取单号 不带日期 001@param key@return
*/
public static String createAutoCode(String key) {
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue().increment(key , 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPad(String.valueOf(autoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
return MessageFormat.format("{0}{1}", key ,value);

}

/**

获取单号 不带日期 不带key 004@param key@return
*/
public static String createAutoCodeNoKey(String key) {
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue().increment(key , 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPad(String.valueOf(autoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
return value;

}

/**

获取单号 带日期 不带年 每天重置 key+20200821001@param key@return
*/
public static String createAutoNotYears(String key) {
//加上时间戳 如果不需要
String datetime = new SimpleDateFormat(“MMdd”).format(new Date());
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue().increment(key + datetime, 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPad(String.valueOf(autoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
String code = MessageFormat.format("{0}{1}", key + datetime,value);
//设置三天过期
redisTemplate.expire(key + datetime, 3, TimeUnit.DAYS);
return code;
}

}

相关阅读

精彩推荐

相关词

推荐阅读