redis的key键设计(善用枚举类)
枚举类特点
枚举类特点:
1:枚举类构造器只能是私有
2:枚举类当定义完成之后,实例个数固定
4:enum和class、interface的地位一样
5:使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类,枚举类可以实现一个或多个接口。
6:枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
7:使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
8:剩下操作跟普通操作一模一样
枚举类更加直观,类型安全。使用静态常量会有以下几个缺陷:
1.类型不安全:若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。
2.没有命名空间:开发者要在命名的时候以SEASON_开头,这样另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。
枚举类(与普通类基本一样,定义对象时,少写了一些代码)
@Getter
public enum MyDate {
DATE1("date1", 1L),
DATE2("date2", 2L),
DATE3("date3", 3L);
@Setter
private String prefix;
@Setter
private Long time;
private MyDate(String prefix, Long time) {
this.prefix = prefix;
this.time = time;
}
public String join(String value) {
return value;
}
}
普通类
@Getter
public class MyDate2 {
public static final MyDate2 DATE1 = new MyDate2("date1", 1L);
public static final MyDate2 DATE2 = new MyDate2("date2", 2L);
public static final MyDate2 DATE3 = new MyDate2("date3", 3L);
@Setter
private String prefix;
@Setter
private Long time;
private MyDate2(String prefix, Long time) {
this.prefix = prefix;
this.time = time;
}
public String join(String value) {
return value;
}
}
redis中的key键设计
@Getter
public enum RedisKeys {
VERIFY_CODE("verify_code", Consts.VERIFY_CODE_VAI_TIME * 60L),
USER_LOGIN_TOKEN("user_login_token", Consts.USER_INFO_TOKEN_VAI_TIME * 60L);
private String prefix;
private Long time;
private RedisKeys(String prefix, Long time) {
this.prefix = prefix;
this.time = time;
}
public String join(String... values) {
StringBuilder sb = new StringBuilder();
sb.append(prefix);
for (String value : values) {
sb.append(":").append(value);
}
return sb.toString();
}
}