`
jeffsang
  • 浏览: 6018 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

OSCache缓存监控实现

    博客分类:
  • java
阅读更多

最近一个项目用到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或持久化也能实现监控。

 

1
4
分享到:
评论
2 楼 zskangs1126 2012-10-08  
1 楼 幽灵线程 2012-10-08  
OSCache 使用private Map是为了安全,反射方式可能会造成一定风险,小心使用。

相关推荐

    oscache缓存技术入门实例

    3. 更新通知:当缓存中的数据发生变化时,osCache可以通过事件机制通知其他系统组件,实现数据的一致性。 4. 缓存同步:在多线程或多服务器环境下,osCache提供了一套机制来确保缓存数据的一致性和完整性。 三、...

    Hibernate OSCache缓存

    **Hibernate OSCache缓存详解** Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者以面向对象的方式操作数据库。为了提高性能,Hibernate 提供了缓存机制,其中 OSCache 是一种广泛使用的二级缓存...

    OSCache缓存框架的简单用法

    OSCache提供了一套监控工具,可以帮助开发者查看缓存状态、性能指标等信息。同时,它还支持日志记录,便于调试和问题定位。 总之,OSCache作为一个强大的缓存框架,能够有效提升应用程序的响应速度,降低数据库负载...

    OSCache缓存jsp例子

    此外,OSCache还提供了API来实现更复杂的缓存操作,如清除特定缓存项、刷新整个缓存等。开发者可以根据实际需求选择合适的缓存策略和管理方法。 在实际应用中,需要注意监控和调整缓存设置,以确保最佳性能。过度...

    oscache缓存使用总结.doc

    OSCache 是一个广泛使用的开源缓存解决方案,尤其在Java应用中,它被JBoss, Hibernate, Spring等知名框架所支持。...同时,监控缓存的命中率和大小,以及定期清理无用的缓存,都是使用OSCache时需要考虑的关键因素。

    OSCACHE配置URL实现页面缓存的Fliter(修改配置无需重启)

    标题 "OSCACHE配置URL实现页面缓存的Filter(修改配置无需重启)" 提示我们讨论的是一个使用OSCache(OpenSymphony Cache)库来缓存Web应用程序中特定URL页面的过滤器配置。OSCache是一个开源的Java缓存框架,用于提高...

    oscache-java缓存框架

    - **集群支持**:在分布式环境中,osCache可以实现多节点间的缓存同步,确保数据一致性。 - **缓存预热**:允许在应用启动时加载预定义的数据到缓存,提高应用启动速度。 - **缓存监听器**:可以通过监听器来监控...

    osCache,缓存

    5. **缓存监控**:osCache提供了丰富的监控工具和API,可以实时查看缓存状态,包括缓存大小、命中率、缓存项数量等,便于进行性能调优。 6. **集成友好**:osCache可以轻松地与Spring、Hibernate等流行框架集成,...

    oscache处理

    - 监控和性能优化:定期检查osCache的性能,如内存占用、缓存命中率等,以便进行优化调整。 总结来说,osCache是一个强大且灵活的缓存工具,它可以与Struts2、iBatis和Spring等框架无缝集成,提升Java Web应用的...

    OSCache学习例子 实例

    8. **监控和调试**:OSCache提供了一个Web管理界面,可以查看缓存的状态、统计信息和进行操作。在生产环境中,这有助于监控和优化缓存性能。 通过这个实例,你可以实际操作,理解OSCache的工作原理,并学习如何根据...

    oscache-2.2jar包

    - **缓存监控**:提供了统计信息和可视化工具,便于监控和优化缓存性能。 在实际开发中,osCache可以通过Spring框架等进行集成,以实现更灵活的配置和管理。使用osCache,开发者可以轻松地将缓存机制融入到Java应用...

    OSCache需要的包

    在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,尤其在基于Spring或Hibernate的应用中,OSCache扮演着关键的角色。 `oscache.tld` 文件是 Tag Library Descriptor (TLD) 文件,它是JSP 2.0规范的...

    oscache的demo

    osCache提供了监控工具,允许开发者实时查看缓存的状态,包括命中率、缓存项数量、内存使用情况等。这对于优化缓存性能和诊断问题非常有帮助。 综上所述,`osCache`是一个强大且灵活的缓存解决方案,通过`...

    oscache-2.4.1-full

    OSCache提供了监控工具,允许开发者查看缓存的性能统计,如命中率、缓存大小、过期策略等,便于调整缓存策略以优化性能。 7. **分布式缓存**: 虽然主要是单机缓存解决方案,但OSCache也可以扩展到分布式环境,...

    oscache所需jar包

    在`osCache`中,`commons-logging.jar`用于记录缓存操作的详细信息,帮助开发者调试和监控缓存行为。 在实际使用`osCache`时,我们需要理解以下几个核心概念: 1. **缓存配置**:`osCache`允许通过XML配置文件定义...

    Oscache使用教程

    3. **监控与统计**:使用Oscache提供的监控工具,了解缓存命中率、大小变化等,以便调整策略。 4. **异常处理**:处理缓存未命中、数据同步等问题,确保程序的健壮性。 通过以上介绍,我们对Oscache有了全面的认识...

    oscache.jar

    5. 配置和监控:OSCache提供丰富的配置选项,可以通过XML配置文件调整缓存行为。此外,还可以使用监控工具查看缓存的状态,如命中率、缓存大小等。 总之,OSCache作为Java缓存解决方案的杰出代表,为开发者提供了...

    OSCache

    7. **缓存管理**: 提供管理工具,方便监控和管理缓存的状态,包括查看缓存大小、清除缓存、统计缓存命中率等。 ### 二、OSCache 的使用步骤 1. **添加依赖**: 首先需要在项目中引入OSCache的依赖,例如oscace-2.4....

    oscache的一些使用

    - **缓存命中率**:监控和调整缓存策略以提高命中率。 - **缓存粒度**:合理设计缓存项,避免过于细粒度导致的内存浪费或过于粗粒度导致的缓存过多数据。 - **缓存更新策略**:根据业务需求选择合适的更新策略,如...

    oscache 整个页面查询数据 与部分数据

    8. **监控与管理**:osCache提供了一个管理控制台,可以实时监控缓存的状态,包括缓存命中率、大小、内存使用情况等,便于开发者调整和优化缓存策略。 总结来说,osCache是Java开发中一个强大的缓存工具,它可以...

Global site tag (gtag.js) - Google Analytics