论坛首页 Java企业应用论坛

声明式缓存,View层缓存讨论

浏览 1808 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-02-03   最后修改:2010-02-04
背景:由于理财专区二期的基金数据一天更新一次。并且都是非操作型数据。后台会将数据缓存起来。每日更新一次。上周的做法是在control层编码方式的添加缓存服务。今天尝试了通过在方法上定义@PageCache,达到的缓存。大家看看,给点意见。

 

实现方式:
在需要缓存的方法上添加标注
@PageCache
public void queryFundList(InputArg arg){}

入参实现PageCacheKey接口。以便在ModelAndView中获得此次请求的cacheKey
class InputArg implements PageCacheKey{
public String getCacheKey();
}

PageCacheAop中,拦截@pageCache的请求
获得入参的cacheKey,检查cache是否命中

CacheJSONView中在ModelAndView中获得入参的cacheKey,取出缓存

 

 

 

调用流程:

 

文字说明:
页面请求a.cjson(新增一种CacheJSONView)
spring mvc controler调用代理过的服务,

代理对象坚持缓存是否命中,决定是否调用真正服务。
命中则直接return,在CacheJSONView中取出缓存的string,直接输出。
没命中则调用后返回ModelAndView,在CacheJSONView中输出后放入缓存。

这种方式的优势是直接在View层缓存。
入参实现PageCacheKey接口的getCacheKey方法,
通过CacheJSONView与代理的对象注入相同的cache服务,并通过cacheKey检查缓存。

劣势是需要添加CacheJSONView,并且访问路径是新增的*.cjson后缀。需要改动sm里面的东西


另外一个方案是,
不在View层缓存。在PageCacheAop中直接返回缓存后的对象。
这种方式优势是无须新增view,只需无须改动sm的东西。并且可以在sm原有的xml,json等方式输出。
劣势是每次返回的对象都会在各自的view中解析成对应协议的数据。如ModelAndView->JSONObject ->String.




大家发表一下意见。看看哪种方式更好。
  • 大小: 31.2 KB
   发表时间:2010-02-03  
@PageCacheKey(value="****")
使用这样的方式表达会否更好?
0 请登录后投票
   发表时间:2010-02-04  
@PageCacheKey(value="****")
使用这样的方式表达会否更好?
nothinkinperson 写道
@PageCacheKey(value="****")
使用这样的方式表达会否更好?


抱歉,文档我已经改过来了。不是@PageCacheKey是@PageCache。

两种做法我觉得没冲突。不过第二种不应该叫PageCache.所以新增了一种@MethodCache。

第一种方式@PageCache保留。

页面的缓存。其他同事提出还是在apache中通过url缓存。
不过apache url缓存有一些条件。需要按apache文档做相应的处理.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics