Java极速框架JFinal-中如何使用好缓存?

鱼中鱼 发布于 2012/07/24 11:03
阅读 10K+
收藏 15

@JFinal 你好,想跟你请教个问题:
启用缓存只需要配置ehcache.xml,加入相应的jar就可以了吗?
那么被缓存对象是在什么时候放入缓存中的?
(是在查询、修改、新增、删除操作时,进行了判断吗?)

在实际的应用只,又如何操作的呢?
在config中配置ehcahe插件,拦截器

public void configPlugin(Plugins me) {	}
public void configInterceptor(Interceptors i) {}

然后在controller中怎么使用呢?

 

加载中
2
JFinal
JFinal

    启用缓存很简单,只需要放入 ehcache.xml 与 jar 包并在 configPlugin中添加一句 : me.add(new EhCachePlugin())就可以使用了。 JFinal 缓存主要有如下几种用法:

1:使用 CacheInterceptor对 actoin 进行全自动缓存

    这种用法非常适用于网站首页,以及网站各大频道,设置好一个合理的过期时间即可。该用法会自动化缓存整个 action 所需的所有数据。

2:使用 CacheKit 工具类在程序中辅助做缓存

    这种用法适合更加细粒度地控制需要缓存的数据,例如,你仅仅需要缓存某 action 中的某个 List 数据,可以使用 CacheKit,具体使用例子见 JFinal 手册。

3:使用 JFinal ActiveRecord 中的 Model 与 Db

    这种用法可以将 ActiveRecord 与缓存结合起来使用,是最省代码的一种使用方式,优点是简单方便、省代码,缺点是查询业务耦合度有所提升。

    被存缓存的对象何时存入缓存,得看具体情况,三种用法有点区别。

    JFinal 缓存采用了最简单的策略,仅缓存不负责更新数据,开发者需要根据不同的业务通过 CacheKit 中的方法主动清除缓存数据。

    对于读多写少的 web 站点,设置好适当的过期时间,在适当的地方清除缓存能非常有效地提升性能。

张旭龙
回复 @JFinal : 谢谢了,发现文档里有,没仔细看
JFinal
JFinal
回复 @张旭龙 : model 与 db 中的 xxxByCache(...) 系列的方法会用到缓存,其中的 cacheName 与 cacheKey 都是开发者自己指定的,生成规则自己定,jfinal 只提供 api
张旭龙
想问下在Model与Db缓存时具体的机制是什么呢, 是同一个sql语句就取缓存吗, 如果遇到 "?" 参数的呢 会根据参数值的不同去取吗
铂金小虫
铂金小虫
hibernate有read-write那种缓存并发策略,防止脏读什么的,是不是可以自己在数据库结束后才更新缓存?
0
鱼中鱼
鱼中鱼
嗯,非常感谢 !
0
JFinal
JFinal

引用来自“鱼中鱼”的答案

嗯,非常感谢 !
谢谢支持,常来 OSC 提问 哈 :)
0
JFinal
JFinal

引用来自“鱼中鱼”的答案

嗯,非常感谢 !
   补充一点:如果该 action 有用户权限管理时(如登录信息等),  使用 CacheInterceptor对 actoin 进行全自动缓存仍然是可以的,只需要将CacheInterceptor 在@Before 中的位置调整好就可以。原则是让 CacheInterceptor 恢复缓存后,其它拦截器再处理用户权限管理(如登录信息等)。
0
jianglu188
jianglu188

引用来自“JFinal”的答案

引用来自“鱼中鱼”的答案

嗯,非常感谢 !
   补充一点:如果该 action 有用户权限管理时(如登录信息等),  使用 CacheInterceptor对 actoin 进行全自动缓存仍然是可以的,只需要将CacheInterceptor 在@Before 中的位置调整好就可以。原则是让 CacheInterceptor 恢复缓存后,其它拦截器再处理用户权限管理(如登录信息等)。
请问这个具体是怎么说呢 要某些action (比方说验证码的action) 不自动缓存要怎么设置呢 
0
JFinal
JFinal

引用来自“jianglu188”的答案

引用来自“JFinal”的答案

引用来自“鱼中鱼”的答案

嗯,非常感谢 !
   补充一点:如果该 action 有用户权限管理时(如登录信息等),  使用 CacheInterceptor对 actoin 进行全自动缓存仍然是可以的,只需要将CacheInterceptor 在@Before 中的位置调整好就可以。原则是让 CacheInterceptor 恢复缓存后,其它拦截器再处理用户权限管理(如登录信息等)。
请问这个具体是怎么说呢 要某些action (比方说验证码的action) 不自动缓存要怎么设置呢 
@ClearInterceptor 即可
0
已销号
已销号

哈,果然使用JFinal遇到的问题大部分在OSC搜一下即可解决。谢谢各位了。

0
boyTise
boyTise

受教了

返回顶部
顶部