##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 createAutoIDString key) {
//加上时间戳 如果不需要
String datetime = new SimpleDateFormat“yyyyMMdd”).formatnew Date));
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue).incrementkey + datetime, 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPadString.valueOfautoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
String code = MessageFormat.format”{0}{1}”, key + datetime,value);
//设置三天过期
redisTemplate.expirekey + datetime, 3, TimeUnit.DAYS);
return code;
}
/**
永远不过期 20200821002@param key@return
*/
public static String createAutoIDNoExpireString key) {
//加上时间戳 如果不需要
String datetime = new SimpleDateFormat“yyyyMMdd”).formatnew Date));
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue).incrementkey + datetime, 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPadString.valueOfautoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
String code = MessageFormat.format”{0}{1}”, key + datetime,value);
return code;
}
/**
获取单号 不带日期 001@param key@return
*/
public static String createAutoCodeString key) {
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue).incrementkey , 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPadString.valueOfautoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
return MessageFormat.format”{0}{1}”, key ,value);
}
/**
获取单号 不带日期 不带key 004@param key@return
*/
public static String createAutoCodeNoKeyString key) {
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue).incrementkey , 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPadString.valueOfautoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
return value;
}
/**
获取单号 带日期 不带年 每天重置 key+20200821001@param key@return
*/
public static String createAutoNotYearsString key) {
//加上时间戳 如果不需要
String datetime = new SimpleDateFormat“MMdd”).formatnew Date));
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue).incrementkey + datetime, 1);
/168飞艇6种不亏钱的方法查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue).incrementkey , 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPadString.valueOfautoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
return MessageFormat.format”{0}{1}”, key ,value);
}
/**
获取单号 不带日期 不带key 004@param key@return
*/
public static String createAutoCodeNoKeyString key) {
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue).incrementkey , 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPadString.valueOfautoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
return value;
}
/**
获取单号 带日期 不带年 每天重置 key+20200821001@param key@return
*/
public static String createAutoNotYearsString key) {
//加上时间戳 如果不需要
String datetime = new SimpleDateFormat“MMdd”).formatnew Date));
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long autoID = redisTemplate.opsForValue).incrementkey + datetime, 1);
//这里是 4 位id,如果位数不够可以自行修改 ,下面的意思是 得到上面 key 的 值,位数为 4 ,不够的话在左边补 0 ,比如 110 会变成 0110
String value = StringUtils.leftPadString.valueOfautoID), NO_LENGTH, “0”);
//然后把 时间戳和优化后的 ID 拼接
String code = MessageFormat.format”{0}{1}”, key + datetime,value);
//设置三天过期
redisTemplate.expirekey + datetime, 3, TimeUnit.DAYS);
return code;
}
}