使用SSH做成的网站,首页如何载入数据是一个问题,既要考虑到及时性和性能也要考虑到SEO,javaeye上也有很多相关的讨论。比如问答版块中的:
http://www.iteye.com/problems/27503
http://www.iteye.com/problems/27503
看了一上午,小总结了一下,无非是以下几种方法:
1.使用首页静态化
2.使用ajax动态调用数据库内容
3.部分静态和部分动态调用
4.使用缓存。
根据我们的需求,我使用缓存首页,具体使用Oscache的CacheFilter缓存首页,具体配置记录如下:
1.引入Oscache的jar
2.src下放入Oscache的配置文件oscache.properties
3.web.xml中写入配置:
最简单的配置:
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
关于详细配置的介绍在这里:http://www.opensymphony.com/oscache/wiki/CacheFilter.html
一下是我的配置:
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>
com.cache.MyFilterCache
</filter-class>
<init-param>
<param-name>time</param-name>
<param-value>-1</param-value>
</init-param>
<init-param>
<param-name>EntryRefreshPolicy </param-name>
<param-value>com.cache.MyEntryRefreshPolicy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
注意:1.filter-class可以使用Oscache自带的com.opensymphony.oscache.web.filter.CacheFilter,
我是为了方便所以自己写了一个类继承了它,重写了一个createCacheKey方法:
public class MyFilterCache extends CacheFilter{
@Override
public String createCacheKey(HttpServletRequest httpRequest, ServletCacheAdministrator scAdmin, Cache cache) {
return httpRequest.getServletPath();
}
}
2. EntryRefreshPolicy 是一个刷新缓存的控制类,实现EntryRefreshPolicy接口,这个接口只声明了
一个方法needsRefresh,就是是否要刷新,呵呵。网上有人说使用CacheFilter无法自己控制刷新,
只能用时间来控制,我看了一下源码发现是可以实现的。
public class MyEntryRefreshPolicy implements EntryRefreshPolicy {
@Override
public boolean needsRefresh(CacheEntry entry) {
if(CacheUtil.isFLUSH()){//判断是否需要刷新缓存
CacheUtil.setFLUSH(false);//刷新缓存后把需要刷新状态设为false
return true;
}
return false;
}
}
其中用到了一个工具类:
public class CacheUtil {
private static boolean FLUSH=false;//是否刷新缓存
public static boolean isFLUSH() {
return FLUSH;
}
public static void setFLUSH(boolean flush) {
FLUSH = flush;
}
}
3.配置中的time是控制刷新时间的,是int类型单位是s,默认是3600.我写成-1是不让他的这个功能生效。
然后就可以手动的控制是否需要刷新了。
如果不仅需要定时刷新还需要手动刷新的话,就在needsRefresh方法中再总相应的处理。
在我的下一笔文章中实现了定时刷新和手动刷新:
Oscache CacheFilter定时刷新和手动刷新缓存URL的实现
http://01404421.iteye.com/blog/510712
分享到:
相关推荐
- `refresh`: 控制缓存内容是否强制刷新,可设为`false`或`true`。 - `mode`: 若设置为`silent`,则被缓存的内容不会被添加到用户响应中,适用于后台缓存管理。 此外,`oscache`还提供了诸如`cron`、`groups`、`...
OsCache是Java应用程序中常用的缓存框架,它能够有效地提高应用程序的性能,通过将经常访问的数据存储在内存中,减少对数据库或其他数据源的访问,从而降低系统负载。本示例将通过一个天气预报Web服务的场景,详细...
此外,OSCache还提供了缓存分组和缓存区域的概念,便于管理多个不同类型的缓存。通过设置不同的缓存区域,可以实现不同业务场景下的缓存策略。 在实际应用中,可能还需要考虑缓存同步问题。例如,当有多个服务器...
1、OSCache是什么? 2、OSCache的特点 3、有关“用OSCache进行缓存对象”的研究
- **事件监听**:osCache允许注册监听器来处理缓存的添加、删除和更新事件,这在实现缓存同步或记录日志时非常有用。 - **缓存预热**:在应用启动时,可以预先加载一部分常用数据到缓存,提高系统启动后的响应速度...
描述中提到的“源代码”和“博文链接”暗示我们将通过阅读源码和博客文章来理解如何配置OSCache Filter以实现URL级别的缓存,并且这种配置变动在不重启服务器的情况下即可生效。 **OSCache基础** 1. **OSCache简介...
Spring的`@Cacheable`、`@CacheEvict`等注解可以方便地声明式地控制缓存行为,简化代码的同时提高了可维护性。 然而,使用oscache时也需要注意一些问题。例如,缓存的大小设置需要根据系统的内存资源和数据特性来...
通过以上步骤,可以构建一个完整的SSM整合项目,结合OScache的页面缓存和Freemarker模板,能提供高性能、易于维护的Web应用。同时,通过RequestBody和ResponseBody,可以实现前后端的JSON数据交互,满足现代Web开发...
3. 更新通知:当缓存中的数据发生变化时,osCache可以通过事件机制通知其他系统组件,实现数据的一致性。 4. 缓存同步:在多线程或多服务器环境下,osCache提供了一套机制来确保缓存数据的一致性和完整性。 三、...
osCache是Java开发中常用的缓存框架之一,它主要用于提高应用程序的性能和效率,通过将数据存储在内存中,减少对数据库的访问。osCache不仅可以用于Web应用,也可以用于任何Java应用程序,支持集群环境,提供了丰富...
- **缓存刷新**:支持手动和自动的缓存刷新机制,确保数据的实时性。 - **并发控制**:内置锁机制,确保多线程环境下数据的一致性。 - **缓存监听器**:允许注册监听器,当缓存发生变动时触发相应事件。 - **与...
OSCache是开源的Java缓存框架,能够帮助开发者实现高效的页面和数据缓存,从而降低数据库的访问压力,提高应用的响应速度。 一、缓存整个页面 OSCache组件提供的`CacheFilter`是一个关键元素,它能对整个动态页面...
例如,在Hibernate中启用osCache,可以实现二级缓存,进一步提高ORM操作的效率。 7. **序列化支持**:osCache支持对象的序列化,这意味着不仅可以缓存基本类型和字符串,还可以缓存复杂的对象结构。 8. **性能优化...
本实例将介绍如何结合Hibernate和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是Hibernate内置的Session级别的缓存,它存储了在同一个Session内操作的对象,避免了频繁的数据库读写。然而,一级缓存仅...
3. **缓存刷新与过期**:OSCache 提供了自动和手动两种方式来控制缓存的过期和刷新。自动过期可以通过设置时间戳或者访问次数来触发,而手动刷新则允许开发者根据业务需求来更新缓存内容。 4. **缓存同步**:在多...
此外,OSCache还提供了API来实现更复杂的缓存操作,如清除特定缓存项、刷新整个缓存等。开发者可以根据实际需求选择合适的缓存策略和管理方法。 在实际应用中,需要注意监控和调整缓存设置,以确保最佳性能。过度...
通过配置网络通信和序列化策略,可以实现跨节点的缓存操作。 **7. 过期与清理机制** OSCache支持自动过期,可以设置对象的存活时间和空闲时间。当达到预设时间,对象将自动从缓存中移除。此外,OSCache还提供定时...
除了静态配置文件外,osCache还支持动态编程配置,可以在代码中通过`CacheManager`实例创建和管理缓存。例如: ```java import net.sf.oscache.CacheManager; CacheManager.init("oscache.properties"); // 初始化...