@Autowired
private RedisTemplate redisTemplate;
/**
* 获取有过期时间的自增长ID
* @param key
* @param expireTime
* @return
*/
public long generate(String key,Date expireTime) {
RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
//判断失效时间
Long expire = counter.getExpire();
if(expire==-1){
counter.expireAt(expireTime);
}
return counter.incrementAndGet();
}
public String generateMessagerId() {
//生成id为当年毫秒+8位(从00000000开始不足位数补0)
LocalDateTime now = LocalDateTime.now();
String IdPrefix = getIdPrefix(now);//
String Id = IdPrefix+String.format("%1$08d", generate(IdPrefix,getExpireAtTime(now)));
return Id;
}
public static String getIdPrefix(LocalDateTime now){
//设定时间戳格式
return now.format(DateTimeFormatter.ofPattern("yyMMddHHss"));
}
public Date getExpireAtTime(LocalDateTime now){
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = now.plusSeconds(20);
ZonedDateTime zdt = localDateTime.atZone(zoneId);
Date date = Date.from(zdt.toInstant());
return date;
}