首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
findbycache问题
macaque
2017-07-27 16:22
findbycache默认使用ehcache,如何换成其它cache呢
项目:
JFinal
评论区
macaque
2017-07-27 16:23
@JFinal
回复
linuxea
2017-07-27 16:37
这个问题本来我也想问的。总结起来就是jfinal支持两个或两个以上的cacheplugin吗。只要cachename不一样就可以,维护的ICache List多从一个地方添加cacheplugin。
回复
杜福忠
2017-07-27 16:56
这样配置的:
ActiveRecordPlugin arp = new ActiveRecordPlugin(DbKit.MAIN_CONFIG_NAME, druidPlugin);
arp.setCache(new MyCache());
// 自己实现 接口 ICache 即可切换任何 Cache
public class MyCache implements ICache {
//.......
T get(String cacheName, Object key);
void put(String cacheName, Object key, Object value);
void remove(String cacheName, Object key);
void removeAll(String cacheName);
}
回复
JFinal
2017-07-27 16:57
@杜福忠
这个是正解
回复
杜福忠
2017-07-27 16:57
@杜福忠
之前研究过一下
http://www.jfinal.com/share/299
回复
linuxea
2017-07-27 17:03
@杜福忠
我们的意思是项目运行时动态的从不同的cache中取数据。也就是能不能同时在项目中配置多个cache,我一下子用ehcahe,一下子用redis
回复
杜福忠
2017-07-27 17:16
@linuxea
http://www.jfinal.com/share/299
这个例子刚好适合你说的场景 ,
如果想时时的改变, 还可以在上述例子中改写
private static String getCacheType() {
return PropKit.get("cache_type", "ehcache");
}
把 PropKit.get("cache_type", "ehcache");
改成 :
private static final ThreadLocal cache_type = new ThreadLocal();
private static String getCacheType() {
String cache_type = cache_type.get("cache_type")
return cache_type != null ? cache_type : "ehcache";
}
publicstatic String setCacheType(String cache_type) {
cache_type.set(cache_type);
}
//快捷
publicstatic String setCacheTypeEhcache() {
setCacheType("ehcache");
}
publicstatic String setCacheTypeXxxcache() {
setCacheType("xxxx");
}
外面同线程的地方 调用一下set即可了, 是不是很简单了?~ 点个赞呗~
回复
JFinal
2017-07-27 20:56
@linuxea
每个 ActiveRecordPlugin 对象都拥有独立的 Cache 依赖配置,所以,如果你的需求是每个数据源拥有独立的 cache,这个天然就实现了。
如果你是希望每个数据源拥有多个不同的 cache,这个需要你自己写代码去控制
回复
linuxea
2017-07-27 21:15
@JFinal
明白:/
回复
macaque
2017-07-28 10:07
@JFinal
对于Action的缓存 CacheInterceptor 是不是也得复写一个Redis的
回复
发送
我要反馈
热门反馈
扫码入社