六、在页面中使用EHCache缓存
简单的来说,如果一个应用中80% 的时间内都在访问20% 的数据,那么,这时候就应该使用缓存了。
在80/20 原则生效的地方,我们都应该考虑是否可以使用缓存。但即使是这样,缓存也有不同的用法,举个例子,一个网站的首页估计是被访问的次数最多的,我们可以考虑给首页做一个页面缓存。页面访问最频繁的,做缓存。不同的页面的缓存策略有可能有天壤之别。
毫无疑问,几乎所有的网站的首页都是访问率最高的,而首页上的数据来源又是非常广泛的,大多数来自不同的对象,而且有可能来自不同的db ,所以给首页做缓存是一个不错的主意,那么主页的缓存策略是什么样子的呢,我认为应该是某个固定时间之内不变的,比如说2 分钟更新一次。或者根据不同的网页功能采取合理的策略。
在使用ehcache 的页面缓存之前,我们必须要了解ehcache 的2个概念:
(1)timeToIdleSeconds ,多长时间不访问该缓存,那么ehcache 就会清除该缓存。
(2)timeToLiveSeconds ,缓存的存活时间,从开始创建的时间算起。
1、配置ehcache.xml文件
2、在web.xml配置文件中配置过滤器信息
好了,缓存整个页面看上去是非常的简单,甚至都不需要写一行代码,只需要几行配置就行了,够简单吧,虽然看上去简单,但是事实上内部实现却不简单哦,有兴趣的话,大家可以看看SimplePageCachingFilter 继承体系的源代码。
缓存首页(整个页面)示例:
< filter >
< filter-name > indexCacheFilter </filter-name >
< filter-class >
net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter
</filter-class >
</filter >
< filter-mapping >
< filter-name > indexCacheFilter </filter-name >
< url-pattern > *index.action </url-pattern >
</filter-mapping >
缓存首页的部分内容时,需要使用SimplePageFragmentCachingFilter 这个filter 。如:
< filter >
< filter-name > indexCacheFilter </filter-name >
< filter-class >
net.sf.ehcache.constructs.web.filter.SimplePageFragmentCachingFilter
</filter-class >
</filter >
< filter-mapping >
< filter-name > indexCacheFilter </filter-name >
< url-pattern > */index_right.jsp </url-pattern >
</filter-mapping >
这个jsp 需要被jsp:include 到其他页面,这样就做到的局部页面的缓存。这一点貌似没有oscache 的tag 好用。