package com.fastbee.common.core.redis;
|
|
import com.fasterxml.jackson.annotation.JsonValue;
|
import lombok.AllArgsConstructor;
|
import lombok.Data;
|
import lombok.Getter;
|
|
import java.time.Duration;
|
|
/**
|
* Redis Key 定义类
|
*
|
* @author fastbee
|
*/
|
@Data
|
public class RedisKeyDefine {
|
|
@Getter
|
@AllArgsConstructor
|
public enum KeyTypeEnum {
|
|
STRING("String"),
|
LIST("List"),
|
HASH("Hash"),
|
SET("Set"),
|
ZSET("Sorted Set"),
|
STREAM("Stream"),
|
PUBSUB("Pub/Sub");
|
|
/**
|
* 类型
|
*/
|
@JsonValue
|
private final String type;
|
|
}
|
|
@Getter
|
@AllArgsConstructor
|
public enum TimeoutTypeEnum {
|
|
FOREVER(1), // 永不超时
|
DYNAMIC(2), // 动态超时
|
FIXED(3); // 固定超时
|
|
/**
|
* 类型
|
*/
|
@JsonValue
|
private final Integer type;
|
|
}
|
|
/**
|
* Key 模板
|
*/
|
private final String keyTemplate;
|
/**
|
* Key 类型的枚举
|
*/
|
private final KeyTypeEnum keyType;
|
/**
|
* Value 类型
|
*
|
* 如果是使用分布式锁,设置为 {@link java.util.concurrent.locks.Lock} 类型
|
*/
|
private final Class<?> valueType;
|
/**
|
* 超时类型
|
*/
|
private final TimeoutTypeEnum timeoutType;
|
/**
|
* 过期时间
|
*/
|
private final Duration timeout;
|
/**
|
* 备注
|
*/
|
private final String memo;
|
|
private RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class<?> valueType,
|
TimeoutTypeEnum timeoutType, Duration timeout) {
|
this.memo = memo;
|
this.keyTemplate = keyTemplate;
|
this.keyType = keyType;
|
this.valueType = valueType;
|
this.timeout = timeout;
|
this.timeoutType = timeoutType;
|
// 添加注册表
|
RedisKeyRegistry.add(this);
|
}
|
|
public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class<?> valueType, Duration timeout) {
|
this(memo, keyTemplate, keyType, valueType, TimeoutTypeEnum.FIXED, timeout);
|
}
|
|
public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class<?> valueType, TimeoutTypeEnum timeoutType) {
|
this(memo, keyTemplate, keyType, valueType, timeoutType, Duration.ZERO);
|
}
|
|
/**
|
* 格式化 Key
|
*
|
* 注意,内部采用 {@link String#format(String, Object...)} 实现
|
*
|
* @param args 格式化的参数
|
* @return Key
|
*/
|
public String formatKey(Object... args) {
|
return String.format(keyTemplate, args);
|
}
|
|
}
|