`

声明式缓存,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缓存,清楚的缓存按缓存文件创建时间最老的。 缓存清理均在线程中,所以程序开始的时候调用...

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

    Chrome Cache View是一款专门用于查看和分析Chrome浏览器缓存的工具,它可以帮助用户提取并理解这些缓存记录。 在Chrome浏览器中,缓存主要分为两种类型:磁盘缓存和内存缓存。磁盘缓存存储在用户的本地文件系统中...

    Android-webview缓存

    除了基本的开启缓存,还可以通过`shouldInterceptRequest(WebView view, WebResourceRequest request)`接口拦截请求,根据需要决定是否使用缓存。这个方法会在Webview试图加载资源时被调用。 六、清理缓存 在某些...

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

    首先,我们来讨论一下常见的错误做法。一种常见的错误尝试是通过`v-if`和`v-else`来决定是否缓存组件: ```html <router-view /> <router-view /> ``` 这种做法实际上创建了两个独立的`<keep-alive>`组件,...

    ASP.NET_缓存技术

    ASP.NET缓存技术是.NET框架下用于提升Web应用程序性能的关键特性。它允许开发者将常用数据存储在内存中,避免每次请求时都从数据库或其他慢速资源中获取数据,从而显著提高响应速度。本文将深入探讨ASP.NET缓存的...

    Android实现WebView图片缓存,替换加载前默认图片的样式

    2. 触摸事件拦截:在WebView外部添加一层布局,拦截触摸事件,然后判断点击位置是否在图片上,如果在,则调用相应的处理方法。 ```java FrameLayout webViewContainer = new FrameLayout(this); webViewContainer....

    Android实现新闻列表的磁盘缓存.zip

    它结合了MVP(Model-View-Presenter)架构模式、RxJava响应式编程库、Retrofit网络请求库以及Picasso图片加载库,构建了一个高效的数据缓存机制。 1. MVP架构模式:MVP是一种设计模式,将业务逻辑、界面展示和数据...

    ListView缓存机制

    ListView的缓存机制主要由两部分组成:View缓存(ViewHolder模式)和视图状态缓存(Recycling Mechanism)。 首先,我们来看**ViewHolder模式**。这个模式是为了减少在ListView滚动时频繁创建和销毁View对象而设计...

    Android WebView cache 缓存 在线 视频播放

    而WebView的缓存机制则是提高用户体验、减少网络流量的关键技术之一。本文将详细讲解如何利用WebView实现在线视频播放,并探讨其缓存策略,以便实现离线阅读。 一、WebView基础 1. 初始化WebView:首先,我们需要...

    详解Vue中组件的缓存

    Vue中组件的缓存技术是Vue.js框架提供的一项重要功能,它允许开发者在组件之间切换时,保持之前组件的状态,而不需要重新渲染,这样可以提高应用的性能并改善用户体验。在实际开发过程中,我们经常需要在多个视图或...

    android 清理缓存火箭动画Demo

    【Android 清理缓存火箭动画Demo】是一个用于展示如何在Android应用中实现类似360清理缓存时出现的火箭升空动画效果的示例项目。这个Demo旨在帮助开发者理解如何结合动画与实际功能,比如清理缓存,来提升用户体验。...

    smartImageView

    2. **内存缓存与磁盘缓存**:SmartImageView内置了高效的缓存机制,包括内存缓存和磁盘缓存。当图片从网络加载时,首先会在内存中查找已缓存的图片,如果找不到,则从磁盘读取,再存入内存。这样的设计可以加快图片...

    仿微信清理缓存动画

    2. **自定义View**:可能需要创建一个自定义View或者扩展已有的View,以便添加清理缓存的动画逻辑。 3. **LayoutTransition**:布局过渡动画可以帮助在添加、删除或更改视图时产生平滑的动画效果。 4. **LiveData和...

    chrome cache view

    在现代网络浏览环境中,缓存是提高网页加载速度的关键元素,而Chrome Cache View提供了深入洞察这一机制的途径。 首先,我们来详细了解一下什么是浏览器缓存。浏览器缓存是一种临时存储机制,它保存了用户访问过的...

    Android WebView加载网页以及本地图片缓存问题

    本文将深入探讨如何使用WebView加载网页以及本地图片,并解决缓存问题。 一、WebView的基本使用 1. 初始化WebView:首先,我们需要在布局XML文件中添加WebView组件,并在对应的Activity或Fragment中找到该组件。...

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

    4. **正确的缓存策略**:合理使用`setCacheCount()`和`setDrawingCacheEnabled()`方法,缓存View的位图,减少重新绘制的次数。然而,缓存过大可能会占用过多内存,因此需权衡性能与内存消耗。 5. **避免重叠绘制**...

    Hibernate性能优化:一级缓存

    4. **使用Open Session in View(OSIV)模式**:在Web开发中,为每个HTTP请求开启一个新的会话,可以避免跨请求的一级缓存污染问题,但也要注意防止会话泄漏。 压缩包文件“hibernate_cache_level1”可能包含与一级...

    vue中keep-alive,include的缓存问题

    在Vue中,你可以将`keep-alive`包裹在`router-view`组件周围,以此来缓存路由切换时的组件实例。 ```html <router-view/> ``` 如果你希望只缓存特定的组件,你可以使用`include`属性列出组件的name,Vue将只...

Global site tag (gtag.js) - Google Analytics