为什么要这个类?
当项目中的模块越来越多的时候,需要存的缓存也越来越多,比如商品Id,订单Id,用户id等,此时若是id出现重复,将给系统带来错误。
方法:利用一个前缀来规定不同模块的缓存的key,这样不同模块之间就不会重复。(枚举不好,因为在该类中定义了缓存的时间)。
设定一个抽象基类:Baseprefix 用于继承,不同模块的前缀类都继承他。 Keyprefix()接口定义2 个方法
/** 抽象类 作为 前缀类的父类用于继承 * */ public abstract class BasePrefix implements KeyPrefix { private int expireSeconds; private String prefix; public BasePrefix(String prefix) { this.expireSeconds = 0; this.prefix = prefix; } public BasePrefix(int expireSeconds, String prefix) { this.expireSeconds = expireSeconds; this.prefix = prefix; } @Override public int expireSeconds() { return expireSeconds;// 定义 0 为用永不过期 } @Override public String getPrefix() { String className = this.getClass().getSimpleName(); return className + "_"+ prefix; } }
该类2种不同构造方法:用于继承。一个只带前缀名,一个带前缀名和过期时间。
在比如用到存放 用户信息缓存用于登陆的时候,就可以定义个UserKey来继承这个类。
public class MiaoshaUserKey extends BasePrefix { /*私有化 构造函数 外面无法创建*/ public static MiaoshaUserKey token = new MiaoshaUserKey(3600*24*2,"token"); public static MiaoshaUserKey getByName = new MiaoshaUserKey("id"); private MiaoshaUserKey(String prefix) { super(prefix); } private MiaoshaUserKey(int time ,String prefix){ super(time,prefix); } }
这样不同模块之间通过前缀就可以区分是不同的key,减少了查找的复杂性,也提高代码的冗余度和优雅。更方便看。
秒杀商品的过期时间等等也会用到。
get() set() 方法的时候。传入前缀,key,值就可以完全区分开,不会取错,存错。