论坛首页 Java企业应用论坛

OSCache这种情况怎么缓存呢?

浏览 8489 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-02-09  
我们现在的程序是这样的:
程序的静态内容和表单都是html
动态的内容都是一个servlet和一个jsp文件,servlet准备数据放到request里然后forward到jsp
jsp唯一功能就是显示request里面的数据。

现在的问题是有些页面访问数据库量大或者频繁想做一个cache.
我没用过oscache,在网上看了一下基本介绍的都是在jsp文件中加入如下形式的代码
<cache:cache key="products" scope="session">
         some jsp content 
</cache:cache>


可是我的动态内容都是在servlet里面访问的数据库,对于动态内容用户只能访问servlet不能直接访问jsp
这样的话用户访问servlet还是要查数据库阿,
想我这种情况该怎么做呢??
   发表时间:2006-02-09  
oscache的文档挺"立整"(东北话)的,感受把文档首页的内容看过就能玩转了:
http://www.opensymphony.com/oscache/wiki/Documentation.html

一部份内容:

引用
4. Reference Guide
Configuration - Configuration options for OSCache.
JSP Tags - Detailed documentation on OSCache's tags and how to use them.
CacheFilter Configuration - How to configure OSCache to cache entire servlet responses.
Cron Expressions - How to use the cron expression syntax to expire content.
JavaDoc API - The OSCache API documentation in JavaDoc format.


OSCache有简单的API允许用户按key来对cache put/get内容.
对于j2ee,又提供了更高层更便捷的taglib和filter来缓存页面片段或整个页面回应. 要考虑的有缓存策略和业务键值的设定.
狂喜欢这种简单实用的东东
0 请登录后投票
   发表时间:2006-02-09  
补充下,时刻记得cache是按key-value格式存放内容的,让key准确的命中内容很重要.
如果要缓存整个页面,可以考虑用filter.
如果页面有针对具体session的显示,如每页上部都要显示当前登录的用户名,scope就只能设成"session",这样的cache效果不大甚至有反作用(我猜oscache会把sessionid+我们设定的cacheid联合作为oscache的key). filter默认是把url连同request参数作为cache的key,如果参数变化挺大,这个也不大行,就只能考虑设置并实现filter的ICacheKeyProvider了(能抽像出来的话).


如果上面的方式都不能避免大量缓存实体出现,就只能如sorphi所说,在代码中用它的API搞了(可以看作缓存粒度吧).

上面讲的其实是下面链接里的意思(也是oscache文档首页上的链接):
http://www.theserverside.com/articles/article.tss?l=OSCacheHelpsDatabases
0 请登录后投票
   发表时间:2006-02-09  
搜了下老贴,关于MVC下应用oscache的问题,femto和dhj1也提出过质疑,不过到底也没个定论,特请wangzy给俺们答疑解惑~
0 请登录后投票
   发表时间:2006-02-10  
谢谢

已经找到解决办法 CacheFilter 正好满足我的要求
我就是想把产品列表缓存 弄个filter把那个servlet缓存到application就OK了
正好满足我的要求,我把缓存时间设置成了1小时

后台加入一个产品前台虽然不能立即看到 不过不碍事,增加产品的可能性很小,也不要求时时看到
基本开始的时候就都录入完毕了

原来我问了一个弱智问题   只因为着急没仔细琢磨,结果进了垃圾桶  哈哈

oscache真简单, I love it
0 请登录后投票
   发表时间:2006-02-10  
我不是缓存一部分页面 而是缓存整个产品列表页面servlet

所以用filter缓存整个servlet 就满足我的需求了

换句话说没有在jsp文件中用oscache

产品列表吗,变动很少

简简单单满足我的需求了
0 请登录后投票
   发表时间:2006-02-10  
如果要在首页缓存一个产品列表区块,可以这样子:)


<cache:cache key="products" scope="session"> 
<jsp:include page="product_list.do"/>
</cache:cache>
0 请登录后投票
   发表时间:2006-12-13  
江南白衣 写道
如果要在首页缓存一个产品列表区块,可以这样子:)


<cache:cache key="products" scope="session"> 
<jsp:include page="product_list.do"/>
</cache:cache>




我们现在就遇到了这个问题,需要局部数据的cache,正巧也想到了用include的方式,但这样,jsp:include是动态加载的,这时候总会报java.io.IOException: Stream closed的Exception,郁闷坏了,
0 请登录后投票
论坛首页 Java企业应用版

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