浏览 8489 次
锁定老帖子 主题:OSCache这种情况怎么缓存呢?
精华帖 (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还是要查数据库阿, 想我这种情况该怎么做呢?? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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来缓存页面片段或整个页面回应. 要考虑的有缓存策略和业务键值的设定. 狂喜欢这种简单实用的东东 ![]() |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2006-02-09
搜了下老贴,关于MVC下应用oscache的问题,femto和dhj1也提出过质疑,不过到底也没个定论,特请wangzy给俺们答疑解惑~
|
|
返回顶楼 | |
发表时间:2006-02-10
谢谢
已经找到解决办法 CacheFilter 正好满足我的要求 我就是想把产品列表缓存 弄个filter把那个servlet缓存到application就OK了 正好满足我的要求,我把缓存时间设置成了1小时 后台加入一个产品前台虽然不能立即看到 不过不碍事,增加产品的可能性很小,也不要求时时看到 基本开始的时候就都录入完毕了 原来我问了一个弱智问题 ![]() oscache真简单, I love it |
|
返回顶楼 | |
发表时间:2006-02-10
我不是缓存一部分页面 而是缓存整个产品列表页面servlet
所以用filter缓存整个servlet 就满足我的需求了 换句话说没有在jsp文件中用oscache 产品列表吗,变动很少 简简单单满足我的需求了 |
|
返回顶楼 | |
发表时间:2006-02-10
如果要在首页缓存一个产品列表区块,可以这样子:)
<cache:cache key="products" scope="session"> <jsp:include page="product_list.do"/> </cache:cache> |
|
返回顶楼 | |
发表时间: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,郁闷坏了, |
|
返回顶楼 | |