`

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

    博客分类:
  • java
阅读更多
背景:由于理财专区二期的基金数据一天更新一次。并且都是非操作型数据。后台会将数据缓存起来。每日更新一次。上周的做法是在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
分享到:
评论
2 楼 yongyuan.jiang 2010-02-04  
@PageCacheKey(value="****")
使用这样的方式表达会否更好?
nothinkinperson 写道
@PageCacheKey(value="****")
使用这样的方式表达会否更好?


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

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

第一种方式@PageCache保留。

页面的缓存。其他同事提出还是在apache中通过url缓存。
不过apache url缓存有一些条件。需要按apache文档做相应的处理.
1 楼 nothinkinperson 2010-02-03  
@PageCacheKey(value="****")
使用这样的方式表达会否更好?

相关推荐

    SmartImageView图片异步下载,缓存自动清除

    SmartImageView图片异步下载开源项目,升级版本,可以自动清除缓存 如项目中的设置,当缓存超过5M。自动清楚1M缓存,清楚的缓存按缓存文件创建时间最老的。 缓存清理均在线程中,所以程序开始的时候调用...

    FragmentTabHost的使用,包括添加缓存View,选项卡,Tabhost

    FragmentTabHost的使用,包括添加缓存View,选项卡,Tabhost

    video cache view(浏览器缓存提取视频)

    这个软件可以将你在用浏览器观看视频时所缓存的视频文件在缓存文件夹里面提取出来,对于一些不会下载视频或者说不想安装各种客户端、不想注册各种网站的人来说,此程序绝对是一把利器! ps:压缩包里的主程序可以...

    【JavaScript源代码】vue keepAlive缓存清除问题案例详解.docx

     <keep-alive v-if="xxx"> <router-view /> </keep-alive> <keep-alive v-else> <router-view /> </keep-alive> 网上很多都是这种方法,用了这种方法,已缓存的东西是没法删掉的,其实这个方法是把缓存页面和...

    Android-webview缓存

    适用于Android项目中webview的缓存,可以指定缓存目录,缓存时间,有问题请加,谢谢

    谷歌浏览器缓存查看chrome cache view

    谷歌浏览器缓存查看chrome cache view 提取chrome缓存纪录

    图片下载缓存读取

    网络上下载图片,缓存到Documents目录下,并显示到view上的小demo

    Android 清除系统缓存

    Android 清除系统缓存 所用技术: 1 反射调用Android系统里面hint API 2 ListView + BaseAdapter ListView优化:模型的复用和View对象的复用 3 ProgressBar

    chrome/Chromium缓存查看chromeCacheView

    chrome/Chromium缓存查看chrome cache view 提取chrome缓存纪录

    异步批量下载图片并缓存源码.zip

    1、下载大图decode时,可根据View大小自动缩放图片,不在出现OOM和SkImageDecoder::Factory returned null错误 2、图片下载失败时,可自定义失败重试次数 3、记录正在下载的任务,防止屏幕滚动时多次下载 4、缓存...

    videocacheview(从缓存提取)

    videocacheview可以从缓存提取视频,当你在网页上看到某个视频后,想要下载,就可以使用这个工具(原理是你在看网页视频的时候,视频是一点一点缓冲到100%并下载到你的电脑临时文件夹里的,使用此工具可以提取出来,...

    keep-alive不能缓存多层级路由菜单问题解决

    这出现的原因是多级路由导致的,就是router-view嵌套 在层级不同的router-view中切换tag会出现缓存数据失效的问题。目前keep-alive可以有效缓存一级,二级的路由菜单,3级以上菜单并不能做到缓存,这里提供一个解决...

    vue路由缓存的几种实现方式小结

    本文实例讲述了vue路由缓存的几种实现方式。分享给大家供大家参考,具体如下...直接用 keep-alive 标签包裹 router-view 标签就能缓存全部的页面了 2、缓存单个指定路由 该路由的name名称> <router></router-view

    react-view-cache:缓存React视图

    React视图缓存 缓存React视图。 介绍 使用react-view-cache,您可以在特殊的Cache组件中呈现组件。 当您在同一缓存中呈现另一个组件时,前一个组件不会立即卸载,而是通过设置为display: none隐藏,并保留所有状态。...

    自定义 view拖动的时候花屏残影问题

    自定义viewGrop ,可以动态添加View到ViewGroup,点击后可以自由拖动,

    StashPHP缓存库.zip

    缓存查询结果能极大地改进脚本执行时间和资源需求。缓存SQL查询结果也允许你通过后期处理数据。如果你用文件缓存去存储全部脚本的输出结果(HTML正常的方法是非常占用资源并且相反的影响了脚本的性能。只能通过取得...

    django开发教程之利用缓存文件进行页面缓存的方法

    当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的...

    Android图片缓存库UniversalImageLoader.zip

    Universal ImageLoader是最早开源的 Android 图片缓存库, 强大的缓存机制。功能特点:支持多线程加载图片(同步或者异步加载)具有很高的定制性每一张图片都有很多备用资源(原始图片、内存缓存、Bitmap等 )图片能...

    解决vue单页面 回退页面 keeplive 缓存问题

    场景:项目中遇到 vue 点击回退 从A页跳到B页,缓存A页,当B页状态修改再次返回A时,A页查询条件缓存不刷新,列表刷新 A页: B页: 解决方法: 利用keep-alive 缓存需要缓存的页面 1.在app.vue中改写router-view ...

    vue keep-alive 动态删除组件缓存的例子

    业务需求: 切换tab页标签的时候(路由前进的时候),缓存当前组件数据,关闭tab页标签的时候清除组件缓存。 实现: 1、先在store的state里面设置一个要缓存数组 2、在进到子页面的时候,更新store的数组,把将要...

Global site tag (gtag.js) - Google Analytics