关于缓存查询数据的问题

duchipore 发布于 2013/01/31 16:24
阅读 322
收藏 1

@JFinal 你好,想跟你请教个问题:

 如果我 要对所有 model 比如 blog,user等 中的 find, get等查询 方法都加缓存的话,且不是每个方法都要封装一下。那不是很麻烦?
拦截器不支持 model的,只支持 controller
所以不能在拦截器里面写,

那么有没有简洁的实现方法,好像springmvc中可以用 spring中的拦截器拦截 service层来实现,但是 jfinal中没有 service层的概念。那么怎么办呢?

谢谢


加载中
0
duchipore
duchipore
还有 缓存在有数据更新时失效的策略,这些都要在model中写死了么? 如果这部分代码多的话,不用拦截器的话是不是要写的代码挺多的。
0
JFinal
JFinal
JFinal 提供了 CacheKit 这个类来辅助实现缓存,详见 jfinal 手册,有例子代码
0
duchipore
duchipore

您好,也许您没有仔细看我的问题,我问得不是那么简单的问题阿。 

我说的就是调用CacheKit的情况下,还是要每个函数写一个调用方法,然后判断缓存里有没有,如果有直接返回。。。。这样就写死在业务代码中了。。。需要缓存的函数多的话,那么就要重复做好多工作。 就像jfinal为啥为controller提供拦截器阿?还不是为了实现业务逻辑和 Log或session判断分开,从而使得代码更好扩展。同样的,我觉得为model层也应该添加拦截器,这样就可以做类似信息缓存等等操作。

0
duchipore
duchipore
controller的拦截器是对“操作”的控制,而对model层添加的拦截器则是对“数据”的控制。
0
JFinal
JFinal

引用来自“xiaweiwei”的答案

controller的拦截器是对“操作”的控制,而对model层添加的拦截器则是对“数据”的控制。

    model 层添加拦截器需要引入 IOC。开发者在Controller 中就接管了一切,例如 Cotroller 中对 Model的创建与使用,此时 JFinal 框架对此没有控制权。所以 Model 层的拦截需要开发者自己来做了。可以用一下 JFinal 提供的 SpringPlugin。

    另外建议仍在 Controller 上使用拦截器做缓存,只不过AOP 偏上层一点点,但无论是AOP偏上层还是偏下层,有一点是一样的:Model层没有任何变化,保障了松耦合

0
duchipore
duchipore
如果不用 SpringPlugin这个的话,在 Controller 上使用拦截器做缓存,那么controller中的函数就不能写太多逻辑了。只能是增删该查,如果写上判断什么的,然后再去调用dao的话,那么根本不能在controller的拦截器上做缓存。比如 controller上有个函数先取得人的信息,这部分不做缓存,然后取得他所拥有的物品的信息,这部分做缓存,这样的话,使用jfinal的拦截器根本搞不定,只能把缓存代码写死在controller中。
返回顶部
顶部