使用规则引擎的时候,缓存规则对象使用到oscache,发现以前写的过于简单(只是简单的把对象缓存在内存中),本次看了一下oscache的相关文档,小结一下使用体会。
配置:在看规则配置说明的时候,最好同时看源代码中的几个配置相关的cache规则参考示例porterties文件。例如:oscacheDiskAndMemory.properties(同时缓冲到磁盘和内存的配置):
# CACHE IN MEMORY
cache.memory=true
# CACHE SIZE
cache.capacity=100
# CACHE PERSISTENCE CLASS
cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
# CACHE DIRECTORY
cache.path=/tmp/cachetagscache
实现类:阅读com.opensymphony.oscache.general.GeneralCacheAdministrator的源代码,如果是简单的需求,继承这个类是一个不错的方式。不要在cache的时候new自己的cache类,写一个sington的方法,例如:
public class RuleSetCache extends GeneralCacheAdministrator{
private RuleSetCache(){
super(null);
}
private static volatile RuleSetCache ruleSetCache = null;
public static RuleSetCache getInstance(){
if(ruleSetCache == null){//判断ruleSetCache对象在jvm中是否存在
synchronized(RuleSetCache.class){
//上面重复判断是为了防止同步耗时
if(ruleSetCache == null){
ruleSetCache = new RuleSetCache();
}
}
}
return ruleSetCache;
}
}
创建缓存,缓存对象,清除缓存等操作在GeneralCacheAdministrator类中写的比较清楚。
监听类:可以新写一个Listener来实现监听RuleSetCache的命中与否,帮助文档中有一个案例,直接拷贝过来添加一些自己的东西就可以了。写这个方法也可以用来改善cache key的创建和使用范围。同时需要在porterties的配置文件中配置这个类的相关信息。
具体的信息在docs\wiki\Statistics.html这个文件中。
测试:为了熟悉oscache,建议把test的base包下的测试案例自己跑一下。这样更容易加深对系统的理解。目前对JspTag和CacheFilter没有用到,有使用心得的可以讨论一下。后续会讲一下和规则引擎的配合使用情况。