/**
* 主键工具类
*
* @author 1
* @date 2022/03/24 19:13:05
*/
@Component
public class PrimaryIdUtils {
@Autowired
private RedisTemplate<String, String> redisTemplate;
/**
* 生成id以今天
*
* @param key 关键
* @param prefix 前缀
* @return {@link String}
*/
public String generateIdByToday(String key, String prefix) {
key = "example:sync_primary_id:" + key;
RedisAtomicLong counter = new RedisAtomicLong(key, Objects.requireNonNull(redisTemplate.getConnectionFactory()));
long num = counter.incrementAndGet();
counter.expireAt(getTodayEndTime());
//前缀+7位顺序编号+5位随机数,每日编号上限9999999
return prefix + getToday() + String.format("%07d", num) + RandomUtil.randomInt(10000, 99999);
}
/**
* 得到今天结束时间
*
* @return {@link Date}
*/
public static Date getTodayEndTime() {
return DateUtil.endOfDay(new Date());
}
/**
* 得到今天
*
* @return {@link String}
*/
public static String getToday() {
return LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
}
}
Redis分布式数据库主键生成
最新推荐文章于 2024-11-27 22:40:09 发布