需求: 原子性递增生成流水号 每到整点 重置单号从0开始
思路: 用Redis给key设置过期时间 每到整点这个key就过期重新生成一个key
public static String getTaskId() {
//生成一个key 从1开始
RAtomicLong atomicLong = CLIENT.getAtomicLong("work-task-id:" + DateUtil.format(new Date(), "yyyyMMddHH"));
long num = atomicLong.incrementAndGet();
if (num==1){
//给key设置整点过期
CLIENT.getBucket("work-task-id:" + DateUtil.format(new Date(), "yyyyMMddHH")).expire(3600 - (DateUtil.minute(new Date()) * 60 + DateUtil.second(new Date())),TimeUnit.SECONDS);
}
//格式YYYYMMDDHH000001
String taskId = DateUtil.format(new Date(), "yyyyMMddHH") + String.format("%6d", num).replace(" ", "0");
return taskId;
}