本架构已经注册代理的业务处理对象在运行时都可以对其接口的方法运行结果进行缓存
该缓存可以使用本地java虚拟机内存也可以使用外部分布式缓存服务
本架构的最终目的为缓存一切在业务上可以被缓存的数据,以牺牲内存空间的方式换取框架响应速度
业务链缓存处理器使用外部分布式缓存相关功能基于缓存处理对象实现,其缓存效能取决于缓存访问器的相应实现
理论上如果把全部注册代理对象都加入缓存那么本架构将只对内存进行操作
在业务处理方法上标记@Cache注解就可以把该方法的返回结果进行缓存,实际例子如下
@Cache
@Override
public Map<?, ?> getUserInfo(String name) throws SQLException {
select("*");
from("user_info");
and("name = ?", name);
return getMap(sql(), parameters());
}
该方法会在第一次调用时传入参数会作为键用于把结果缓存起来
往后如果有参数相同的调用则不会进入该方法体,将直接从缓存中取出结果直接返回
@Cache注解包含以下一些可选项
boolean refresh() default true;
boolean local() default true;
long count() default 0;
long max() default 0;
DateType dateType() default DateType.SECOND;
long outdate() default 0;
refresh 设定该方法是否更新已缓存的数据,如果为false那么全部缓存更新策略都会无效
local 设定该方法是否把结果缓存在本地java内存,如果设定为false那么将会使用系统默认缓存访问器把结果缓存到外部分布式缓存
count 设定该方法的缓存更新策略为使用缓存达到一定访问次数则强制删除缓存,下次进入该方法会重新缓存结果
max 设定该方法最多缓存多少份不同参数对应的返回结果,如果超过设定值则会删除最先前的参数返回结果缓存
outdate 设定该方法的缓存更新策略为使用缓存达到一定时间则强制删除缓存,下次进入该方法会重新缓存结果,设定值与dateType值组合生效
dateType 设定该方法的缓存更新策略的时间类型,如果设定时间类型为月outdate值为2,那么缓存会保持2个月,如果不设定那么默认时间类型为秒
以上设定值可以组合起效,比如设定5分钟或者访问10次都会更新相应缓存
其他特性请自行摸索,请尽量基于业务要求保持时间与空间的均衡比