redis生成されたグローバル一意ID


@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;
}