場景:
公司內部有個業務場景是后台審核之后需要生成一個流水號,規則是: 201807280001,201807280002,201807280003,后面四位依次遞增,前面年月日取當前時間並且轉換成yyyymmdd格式。
於是想到redis比較適合做這種,而且因為是基於內存操作,速度比較快,不占用數據庫資源,於是通過搜集整理出代碼如下:
@Override public String generate(String bizCode) { //** 獲取今天的日期:yyyyMMdd *//* String date = com.i2p.util.DateUtils.getCurentDate(); String key = "serial.number:" + date; //** 自增 *//* long sequence = this.incr(key); String seq = SequenceUtils.getSequence(sequence); StringBuilder sb = new StringBuilder(); sb.append(bizCode).append(seq); String serial = sb.toString(); return serial; }
package com.i2p.util; public class SequenceUtils { static final int DEFAULT_LENGTH = 4; public static String getSequence(long seq) { String str = String.valueOf(seq); int len = str.length(); if (len >= DEFAULT_LENGTH) {// 取決於業務規模,應該不會到達4 return str; } int rest = DEFAULT_LENGTH - len; StringBuilder sb = new StringBuilder(); for (int i = 0; i < rest; i++) { sb.append('0'); } sb.append(str); return sb.toString(); } }
/** * 得到系統當前日期 * "yyyyMMdd" */ public static String getCurentDate() { SimpleDateFormat tempDate = new SimpleDateFormat("yyyyMMdd"); String datetime = tempDate.format(new java.util.Date()); return datetime; }