最近一个项目用到OsCache的页面片段缓存,google了一下居然没有找到OsCache的监控工具(list all keys from cache),于是大略读了一下OSCache-2.4.1的源码,发现Cache.java类的cacheMap定义成了私有变量,如下:
/**
* The actual cache map. This is where the cached objects are held.
*/
private AbstractConcurrentReadCache cacheMap = null;
所以只能用反射机制暴力破解了(按照Sun公司的JVM规范是许可的^_^),主要代码如下:
1) OsCacheUtil.java/**
* 通过反射机制获取Cache私有成员变量cacheMap, 2012/10/8, by jeffsang
* @return
*/
public static AbstractConcurrentReadCache getCacheMap(ServletContext ctx) {
//获取Cache对象实例
Cache cache = ServletCacheAdministrator.getInstance(ctx).getAppScopeCache(ctx);
//通过反射机制获取Cache私有成员变量cacheMap
AbstractConcurrentReadCache cacheMap = null;
try {
Field field = Cache.class.getDeclaredField("cacheMap" );
field.setAccessible( true);
cacheMap = (AbstractConcurrentReadCache) field.get(cache);
field.setAccessible( false);
}
catch (Exception e) {
log.warn( "can't acquire oscache Cache.cacheMap! " , e);
}
return cacheMap;
}
/**
* 获取ServletCache的全部Application Scope的cache, 2012/10/8, by jeffsang
* @return
*/
public static Map getAppScopeCaches(ServletContext ctx) {
Map map = new HashMap();
//获取Cache对象实例
Cache cache = ServletCacheAdministrator.getInstance(ctx).getAppScopeCache(ctx);
//通过反射机制获取Cache私有成员变量cacheMap
AbstractConcurrentReadCache cacheMap = getCacheMap(ctx);
//返回包含在cacheMap中的Map关系的 Set视图。
@SuppressWarnings("unchecked")
Set> setEntry = cacheMap.entrySet();
//使用Iterator遍历器
//Iterator> it = cacheMap.entrySet().iterator();
//使用for遍历cacheMap中的entrySet
for (Map.Entry entry : setEntry) {
String key = entry.getKey();
Object value = cache.getFromCache(key);
//以下方法只能得到CacheEntry对象实例Id
//Object value = entry.getValue();
map.put(key, value);
}
return map;
}
2) oscache_list.jsp<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*" %>
<%@ page import="com.lasun.util.OsCacheUtil" %>
<%
Map<String, Object> map = OsCacheUtil.getAppScopeCaches(request.getServletContext());
request.setAttribute("map", map);
%>
<table border="1">
<tr>
<th>No</th>
<th>Key</th>
<th>Value</th>
</tr>
<c:forEach var="entry" items="${map}" varStatus="status">
<tr>
<td>${status.index+1}</td>
<td>${entry.key}</td>
<td>${entry.value}</td>
</tr>
</c:forEach>
</table>
小结:本例子只实现ServletCache中的Application Scop的cache list功能;通过Listener或持久化也能实现监控。
分享到:
相关推荐
3. 更新通知:当缓存中的数据发生变化时,osCache可以通过事件机制通知其他系统组件,实现数据的一致性。 4. 缓存同步:在多线程或多服务器环境下,osCache提供了一套机制来确保缓存数据的一致性和完整性。 三、...
**Hibernate OSCache缓存详解** Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者以面向对象的方式操作数据库。为了提高性能,Hibernate 提供了缓存机制,其中 OSCache 是一种广泛使用的二级缓存...
OSCache提供了一套监控工具,可以帮助开发者查看缓存状态、性能指标等信息。同时,它还支持日志记录,便于调试和问题定位。 总之,OSCache作为一个强大的缓存框架,能够有效提升应用程序的响应速度,降低数据库负载...
此外,OSCache还提供了API来实现更复杂的缓存操作,如清除特定缓存项、刷新整个缓存等。开发者可以根据实际需求选择合适的缓存策略和管理方法。 在实际应用中,需要注意监控和调整缓存设置,以确保最佳性能。过度...
OSCache 是一个广泛使用的开源缓存解决方案,尤其在Java应用中,它被JBoss, Hibernate, Spring等知名框架所支持。...同时,监控缓存的命中率和大小,以及定期清理无用的缓存,都是使用OSCache时需要考虑的关键因素。
标题 "OSCACHE配置URL实现页面缓存的Filter(修改配置无需重启)" 提示我们讨论的是一个使用OSCache(OpenSymphony Cache)库来缓存Web应用程序中特定URL页面的过滤器配置。OSCache是一个开源的Java缓存框架,用于提高...
- **集群支持**:在分布式环境中,osCache可以实现多节点间的缓存同步,确保数据一致性。 - **缓存预热**:允许在应用启动时加载预定义的数据到缓存,提高应用启动速度。 - **缓存监听器**:可以通过监听器来监控...
5. **缓存监控**:osCache提供了丰富的监控工具和API,可以实时查看缓存状态,包括缓存大小、命中率、缓存项数量等,便于进行性能调优。 6. **集成友好**:osCache可以轻松地与Spring、Hibernate等流行框架集成,...
- 监控和性能优化:定期检查osCache的性能,如内存占用、缓存命中率等,以便进行优化调整。 总结来说,osCache是一个强大且灵活的缓存工具,它可以与Struts2、iBatis和Spring等框架无缝集成,提升Java Web应用的...
8. **监控和调试**:OSCache提供了一个Web管理界面,可以查看缓存的状态、统计信息和进行操作。在生产环境中,这有助于监控和优化缓存性能。 通过这个实例,你可以实际操作,理解OSCache的工作原理,并学习如何根据...
- **缓存监控**:提供了统计信息和可视化工具,便于监控和优化缓存性能。 在实际开发中,osCache可以通过Spring框架等进行集成,以实现更灵活的配置和管理。使用osCache,开发者可以轻松地将缓存机制融入到Java应用...
在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,尤其在基于Spring或Hibernate的应用中,OSCache扮演着关键的角色。 `oscache.tld` 文件是 Tag Library Descriptor (TLD) 文件,它是JSP 2.0规范的...
osCache提供了监控工具,允许开发者实时查看缓存的状态,包括命中率、缓存项数量、内存使用情况等。这对于优化缓存性能和诊断问题非常有帮助。 综上所述,`osCache`是一个强大且灵活的缓存解决方案,通过`...
OSCache提供了监控工具,允许开发者查看缓存的性能统计,如命中率、缓存大小、过期策略等,便于调整缓存策略以优化性能。 7. **分布式缓存**: 虽然主要是单机缓存解决方案,但OSCache也可以扩展到分布式环境,...
在`osCache`中,`commons-logging.jar`用于记录缓存操作的详细信息,帮助开发者调试和监控缓存行为。 在实际使用`osCache`时,我们需要理解以下几个核心概念: 1. **缓存配置**:`osCache`允许通过XML配置文件定义...
3. **监控与统计**:使用Oscache提供的监控工具,了解缓存命中率、大小变化等,以便调整策略。 4. **异常处理**:处理缓存未命中、数据同步等问题,确保程序的健壮性。 通过以上介绍,我们对Oscache有了全面的认识...
5. 配置和监控:OSCache提供丰富的配置选项,可以通过XML配置文件调整缓存行为。此外,还可以使用监控工具查看缓存的状态,如命中率、缓存大小等。 总之,OSCache作为Java缓存解决方案的杰出代表,为开发者提供了...
7. **缓存管理**: 提供管理工具,方便监控和管理缓存的状态,包括查看缓存大小、清除缓存、统计缓存命中率等。 ### 二、OSCache 的使用步骤 1. **添加依赖**: 首先需要在项目中引入OSCache的依赖,例如oscace-2.4....
- **缓存命中率**:监控和调整缓存策略以提高命中率。 - **缓存粒度**:合理设计缓存项,避免过于细粒度导致的内存浪费或过于粗粒度导致的缓存过多数据。 - **缓存更新策略**:根据业务需求选择合适的更新策略,如...
8. **监控与管理**:osCache提供了一个管理控制台,可以实时监控缓存的状态,包括缓存命中率、大小、内存使用情况等,便于开发者调整和优化缓存策略。 总结来说,osCache是Java开发中一个强大的缓存工具,它可以...