¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.common.redis.utils;
|
| | |
|
| | | import cn.hutool.core.date.DatePattern;
|
| | | import cn.hutool.core.date.DateUtil;
|
| | | import org.dromara.common.core.utils.SpringUtils;
|
| | | import org.dromara.common.core.utils.StringUtils;
|
| | | import lombok.AccessLevel;
|
| | | import lombok.NoArgsConstructor;
|
| | | import org.redisson.api.RIdGenerator;
|
| | | import org.redisson.api.RedissonClient;
|
| | |
|
| | | import java.time.Duration;
|
| | |
|
| | | /**
|
| | | * åå·å¨å·¥å
·ç±»
|
| | | *
|
| | | * @author ç§è¾æªå¯
|
| | | * @date 2024-12-10
|
| | | */
|
| | | @NoArgsConstructor(access = AccessLevel.PRIVATE)
|
| | | public class SequenceUtils {
|
| | |
|
| | | /**
|
| | | * é»è®¤åå§å¼
|
| | | */
|
| | | public static final Long DEFAULT_INIT_VALUE = 1L;
|
| | | /**
|
| | | * é»è®¤æ¥é¿
|
| | | */
|
| | | public static final Long DEFAULT_STEP_VALUE = 1L;
|
| | | /**
|
| | | * é»è®¤è¿ææ¶é´-天
|
| | | */
|
| | | public static final Duration DEFAULT_EXPIRE_TIME_DAY = Duration.ofDays(1);
|
| | | /**
|
| | | * é»è®¤è¿ææ¶é´-åé
|
| | | */
|
| | | public static final Duration DEFAULT_EXPIRE_TIME_MINUTE = Duration.ofMinutes(1);
|
| | |
|
| | | /**
|
| | | * è·åRedisson客æ·ç«¯å®ä¾
|
| | | */
|
| | | private static final RedissonClient REDISSON_CLIENT = SpringUtils.getBean(RedissonClient.class);
|
| | |
|
| | | /**
|
| | | * è·åIDçæå¨
|
| | | *
|
| | | * @param key ä¸å¡key
|
| | | * @param expireTime è¿ææ¶é´
|
| | | * @param initValue IDåå§å¼
|
| | | * @param stepValue IDæ¥é¿
|
| | | * @return IDçæå¨
|
| | | */
|
| | | private static RIdGenerator getIdGenerator(String key, Duration expireTime, Long initValue, Long stepValue) {
|
| | | if (initValue == null || initValue <= 0) {
|
| | | initValue = DEFAULT_INIT_VALUE;
|
| | | }
|
| | | if (stepValue == null || stepValue <= 0) {
|
| | | stepValue = DEFAULT_STEP_VALUE;
|
| | | }
|
| | | RIdGenerator idGenerator = REDISSON_CLIENT.getIdGenerator(key);
|
| | | // è®¾ç½®è¿ææ¶é´
|
| | | idGenerator.expire(expireTime);
|
| | | // 设置åå§å¼åæ¥é¿
|
| | | idGenerator.tryInit(initValue, stepValue);
|
| | | return idGenerator;
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åæå®ä¸å¡keyçå¯ä¸id
|
| | | *
|
| | | * @param key ä¸å¡key
|
| | | * @param expireTime è¿ææ¶é´
|
| | | * @param initValue IDåå§å¼
|
| | | * @param stepValue IDæ¥é¿
|
| | | * @return å¯ä¸id
|
| | | */
|
| | | public static long nextId(String key, Duration expireTime, Long initValue, Long stepValue) {
|
| | | return getIdGenerator(key, expireTime, initValue, stepValue).nextId();
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åæå®ä¸å¡keyçå¯ä¸idå符串
|
| | | *
|
| | | * @param key ä¸å¡key
|
| | | * @param expireTime è¿ææ¶é´
|
| | | * @param initValue IDåå§å¼
|
| | | * @param stepValue IDæ¥é¿
|
| | | * @return å¯ä¸id
|
| | | */
|
| | | public static String nextIdStr(String key, Duration expireTime, Long initValue, Long stepValue) {
|
| | | return String.valueOf(nextId(key, expireTime, initValue, stepValue));
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åæå®ä¸å¡keyçå¯ä¸id (IDåå§å¼=1,IDæ¥é¿=1)
|
| | | *
|
| | | * @param key ä¸å¡key
|
| | | * @param expireTime è¿ææ¶é´
|
| | | * @return å¯ä¸id
|
| | | */
|
| | | public static long nextId(String key, Duration expireTime) {
|
| | | return getIdGenerator(key, expireTime, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE).nextId();
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åæå®ä¸å¡keyçå¯ä¸idå符串 (IDåå§å¼=1,IDæ¥é¿=1)
|
| | | *
|
| | | * @param key ä¸å¡key
|
| | | * @param expireTime è¿ææ¶é´
|
| | | * @return å¯ä¸id
|
| | | */
|
| | | public static String nextIdStr(String key, Duration expireTime) {
|
| | | return String.valueOf(nextId(key, expireTime));
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·å yyyyMMdd å¼å¤´çå¯ä¸id
|
| | | *
|
| | | * @return å¯ä¸id
|
| | | */
|
| | | public static String nextIdDate() {
|
| | | return nextIdDate("");
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·å prefix + yyyyMMdd å¼å¤´çå¯ä¸id
|
| | | *
|
| | | * @param prefix ä¸å¡åç¼
|
| | | * @return å¯ä¸id
|
| | | */
|
| | | public static String nextIdDate(String prefix) {
|
| | | // åç¼+æ¥æ æå»º prefixKey
|
| | | String prefixKey = StringUtils.format("{}{}", StringUtils.blankToDefault(prefix, ""), DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_FORMATTER));
|
| | | // è·åä¸ä¸ä¸ªid
|
| | | long nextId = getIdGenerator(prefixKey, DEFAULT_EXPIRE_TIME_DAY, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE).nextId();
|
| | | // è¿å宿´id
|
| | | return StringUtils.format("{}{}", prefixKey, nextId);
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·å yyyyMMddHHmmss å¼å¤´çå¯ä¸id
|
| | | *
|
| | | * @return å¯ä¸id
|
| | | */
|
| | | public static String nextIdDateTime() {
|
| | | return nextIdDateTime("");
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·å prefix + yyyyMMddHHmmss å¼å¤´çå¯ä¸id
|
| | | *
|
| | | * @param prefix ä¸å¡åç¼
|
| | | * @return å¯ä¸id
|
| | | */
|
| | | public static String nextIdDateTime(String prefix) {
|
| | | // åç¼+æ¥ææ¶é´ æå»º prefixKey
|
| | | String prefixKey = StringUtils.format("{}{}", StringUtils.blankToDefault(prefix, ""), DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_FORMATTER));
|
| | | // è·åä¸ä¸ä¸ªid
|
| | | long nextId = getIdGenerator(prefixKey, DEFAULT_EXPIRE_TIME_MINUTE, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE).nextId();
|
| | | // è¿å宿´id
|
| | | return StringUtils.format("{}{}", prefixKey, nextId);
|
| | | }
|
| | |
|
| | | }
|