本文主要是介绍订单号自增长部分实现——工作笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
很多场景需要用到订单号,订单号可能会有很多元素组成,比如:特定字符+时间+自增长。其中大多情况下必不可少的是自增长部分。现提供利用redis来实现自增长的几种方式:
每天重置的自增长
/*** 获取订单号自增长部分,每天重置* @param key 主键* @param model 格式模板,例如五位数: 00000* @param maxNum 最大值* @author lixiang* @date 2019年04月18日 - 11:30* @history 2019年04月18日 - 11:30 lixiang create.*/public static String getOrderNumber(String key, String model, int maxNum) {Calendar cal = Calendar.getInstance();cal.setTime(new Date());cal.set(Calendar.HOUR_OF_DAY, 23);cal.set(Calendar.MINUTE, 59);cal.set(Calendar.SECOND, 59);int expireTime = (int) ((cal.getTimeInMillis() - System.currentTimeMillis()) / 1000);long num = RedisUtil.incr(key);// 达到最大值后返回nullif (num > maxNum) {return null;}RedisUtil.expire(key, expireTime);NumberFormat nf = new DecimalFormat(model);return nf.format(num);}
注意:到达最大值后需要怎么处理需自行修改,上面这段代码是适用于到达最大值后进行告警,因此我返回了null。
到达最大值后重置
/*** 获取订单号自增长部分,到达最大值后重置* @param key 主键* @author lixiang* @date 2019年04月18日 - 11:35* @history 2019年04月18日 - 11:35 lixiang create.*/public static String getOrderNumber(String key, String model, int maxNum) {NumberFormat nf = new DecimalFormat(model);long num = RedisUtil.incr(key);if (maxNum <= num) {num = 1;RedisUtil.set(key, num);}return nf.format(num);}
后续有想到其他的再补充吧!
这篇关于订单号自增长部分实现——工作笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!