話不多上,直接上碼
public class TestService {
@Resource
RedisTemplate<String, Object> redisTemplate;
public String getId() {
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
Date date=new Date();
String formatDate=sdf.format(date);
String key="key"+formatDate;
Long incr = getIncr(key, getCurrent2TodayEndMillisTime());
if(incr==0) {
incr = getIncr(key, getCurrent2TodayEndMillisTime());//從001開始
}
DecimalFormat df=new DecimalFormat("000");//三位序列號
return formatDate+df.format(incr);
}
public Long getIncr(String key, long liveTime) {
RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
Long increment = entityIdCounter.getAndIncrement();
if ((null == increment || increment.longValue() == 0) && liveTime > 0) {//初始設置過期時間
entityIdCounter.expire(liveTime, TimeUnit.MILLISECONDS);//單位毫秒
}
return increment;
}
//現在到今天結束的毫秒數
public Long getCurrent2TodayEndMillisTime() {
Calendar todayEnd = Calendar.getInstance();
// Calendar.HOUR 12小時制
// HOUR_OF_DAY 24小時制
todayEnd.set(Calendar.HOUR_OF_DAY, 23);
todayEnd.set(Calendar.MINUTE, 59);
todayEnd.set(Calendar.SECOND, 59);
todayEnd.set(Calendar.MILLISECOND, 999);
return todayEnd.getTimeInMillis()-new Date().getTime();
}
}