`
luojiy
  • 浏览: 53724 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

OSCache——学习笔记

阅读更多
转自:http://blog.zhisou.com/space/?uid-101-action-viewspace-itemid-805
学习OSCache, 总结如下:

1。为什么需要OSCache这类的工具?
         引用:http://www.jdon.com/artichect/dbover.htm
         如何尽量减少数据库访问是J2EE应用系统首要解决的问题,使用存储过程并没有解决这个问题,存储过程的执行还是属于后端,并没有缩短客户端请求所要经历的坎坷路途。解决性能问题的根本解决之道是使用对象缓存,现在, 64位CPU提供的巨大内存空间为单台缓存计算提供了硬件基础,更重要的是,这种缓存计算是可伸缩的,通过集群的缓存机制(如JBossCache),通过增加应用服务器的数量,可以提高整个业务逻辑层的缓存计算能力,抛弃过去那种为内存斤斤计较的老思维吧。

2。利用OSCache主要可以做的事情
      1)POJO  对象的缓存
             这是oscache的核心,事实上,jsp页面缓存功能就是基于这个来进行扩展的。
      2)jsp页面的缓存
             oscache提供非常好用的jsp tag library来提供jsp页面的缓存。

3。源码分析
     oscache的代码量很少。分析源码的时候,主要分析com.opensymphony.oscache.base.Cache类就可以,这个又是整个 oscache的核核心类,除此之外,都是辅助类。oscache用很少的代码量来实现这么强大的功能,应该说代码还是很值得阅读的。
     com.opensymphony.oscache.base.Cache的api中主要的方法如下:
  
  public void putInCache(String key,
    Object content, String[] groups, 
     EntryRefreshPolicy policy, String origin);
     public void getFromCache(String, int, String);
     public void cancelUpdate(String key);

     如何使用,引用官方的docs中的一段例子如下:
   

String myKey = "myKey";
String myValue;
int myRefreshPeriod = 1000;
try {
    // Get from the cache
    myValue = (String) admin.getFromCache(myKey, myRefreshPeriod);
} catch (NeedsRefreshException nre) {
    try {
        // Get the value (probably from the database)
        myValue = "This is the content retrieved.";
        // Store in the cache
        admin.putInCache(myKey, myValue);
    } catch (Exception ex) {
        // We have the current content if we want fail-over.
        myValue = (String) nre.getCacheContent();
        // It is essential that cancelUpdate is called if the
        // cached content is not rebuilt
        admin.cancelUpdate(myKey);
    }
}

这段代码是非常使用oscache的经典代码。细说如下myValue = (String) admin.getFromCache(myKey, myRefreshPeriod);从对象缓存map中取出myKey对应的对象,两种情况可能发生: 一:如果myKey对应的对象存在(先前putInCache)并且没有过期(isStale()方法)那么getFromCache方法会正常返回。二:如果对应的对象不存在或者过期,又分为两种情况:      1)请求的线程第一个探测到对象过期,那么这个时候oscache会抛给client一个NeedRefreshException, 提示client,需要对数据进行一下刷新,怎么刷新,putInCache即可。    2)如果请求的线程并非第一个探测到对象过期,两种情况:I如果oscache.properties中对blocking设置为true,那么该线程会在此阻塞,直到putInCache在另一个线程中被调用或者是cancelUpdate被调用。II否则情况跟1)类型,也会出现 NeedRefreshException.
上面的那个例子之所以要在catch(NeedRefreshException)中进行 putInCache,又之所以要在putInCache的catch(Exception)中做cancelUpdate道理就在此,我们不希望看到一个线程在 getFromCache的位置一直阻塞下去。

补充:oscache对一个cacheEntry是否是Stale(或者说expire)的判断原则:
1。Cache.flushEntry()
2。Cache.flushAll()
3。CacheEntry.setGroups(groups); Cache.flushGroup(group)
4。createTime + refreshPeriod< now
5。cronExpiry< now
6。CacheEntry自带的EntryRefreshPolish的needRefresh方法返回true
上面的6条中的任何一条如果为true, 那么CacheEntry就是stale的,need refresh!!
分享到:
评论
1 楼 txw1013 2011-07-07  
sdfsd

相关推荐

    OSCache学习例子 实例

    在这个"OSCache学习例子 实例"中,我们将深入探讨如何在J2EE环境中集成并使用OSCache。 首先,理解OSCache的基本概念至关重要。OSCache的核心功能是提供内存中的对象缓存,它支持两种主要的缓存模式:本地缓存和...

    oscache-2.1.jar

    oscache-2.1.jar oscache-2.1.jar

    oscache缓存配置

    《osCache缓存配置详解》 osCache是Java平台上的一个高效、易用的缓存解决方案,它由Tuckey组织开发,广泛应用于各种Web应用中,以提高数据读取速度,减轻数据库压力。osCache的核心功能是提供了一个内存中的对象...

    Oscache框架的搭建步骤

    ### Oscache框架的搭建与应用详解 在现代Web开发中,缓存技术是提升系统响应速度、优化用户体验的关键策略之一。Oscache框架作为一种高效、灵活的缓存解决方案,在Java Web应用,尤其是JSP环境中,提供了强大的缓存...

    oscache缓存技术入门实例

    osCache 是一个开源的、基于Java的缓存框架,它为Java应用程序提供了高效且可配置的内存缓存功能。在本文中,我们将深入探讨osCache的基本概念、工作原理以及如何在实际项目中进行配置和使用。 一、osCache基本概念...

    OSCache需要的包

    OSCache 是一个高效的、开源的缓存框架,主要用于 Java 应用程序,它提供了一种在内存中存储对象的方式,以提高数据访问速度并减轻数据库的负载。在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,...

    oscache详细配置文档

    OSCache 是一个强大的开源缓存解决方案,主要用于提升 Java Web 应用程序的性能。它能够缓存页面内容,减轻数据库压力,并减少服务器的资源消耗。本文将详细介绍 OSCache 的配置和使用方法。 **一、缓存整个页面** ...

    oscache-2.4.1-full

    - `src`:源代码目录,对于开发者来说,可以查看源代码以便理解和学习OSCache的工作原理。 - `lib`:依赖的第三方库,OSCache可能需要这些库来正常工作。 - `etc`:通常包含配置文件,如`oscache.properties`,...

    OSCache配置说明文档

    本文档的主要目的是阐述OSCache的核心功能、配置方法以及实际应用中的操作步骤,帮助开发者理解和有效地利用OSCache提升应用程序性能。 阅读对象: 此文档适合对Java Web开发有一定了解,希望引入缓存机制以优化...

    oscache处理

    - 配置osCache插件:首先需要将osCache的jar包添加到项目类路径中,然后在struts.xml配置文件中引入osCache拦截器,并配置相应的拦截规则。 2. **iBatis与osCache**: - iBatis是一个轻量级的持久层框架,它允许...

    oscache-java缓存框架

    osCache是Java开发中常用的缓存框架之一,它主要用于提高应用程序的性能和效率,通过将数据存储在内存中,减少对数据库的访问。osCache不仅可以用于Web应用,也可以用于任何Java应用程序,支持集群环境,提供了丰富...

    OsCache缓存框架使用示例

    OsCache是Java应用程序中常用的缓存框架,它能够有效地提高应用程序的性能,通过将经常访问的数据存储在内存中,减少对...在天气预报的示例中,OsCache不仅简化了代码,还提高了用户体验,是值得学习和掌握的技术。

    oscache的使用实例和详解

    **osCache:高效缓存框架详解与实例应用** osCache是一款流行且强大的Java缓存框架,主要用于提高应用程序的性能和响应速度。它通过将经常访问的数据存储在内存中,避免了反复读取数据库或计算数据的过程,从而显著...

    oscache缓存技术

    通过学习这些示例,开发者可以更好地理解osCache的工作原理,并将其应用到实际项目中。 总结来说,osCache是一个强大的工具,它简化了Java应用程序的缓存管理,提高了系统性能。通过合理配置和使用,开发者可以充分...

    oscache(JSP定制标记应用)

    javaweb做页面缓存常用,OSCache是一个工业级的J2EE缓存实现。OSCache不但能缓存java对象,还可以缓存页面,http请求和二进制内容,例如pdf文件等。通过应用OSCache,我们不但可以实现通常的Cache功能,还能够改善...

    oscache-2.2jar包

    5. **src**:源代码目录,如果提供的话,可以查看osCache的内部实现,这对于学习和调试很有帮助。开发者可以研究源码来理解osCache的工作原理,并且在必要时进行定制或扩展。 6. **lib**:依赖库目录,可能包含了...

    oscache文档

    **2.3 解决方案——缓存技术的应用** 1. **缓存信息**:首次访问时,将基础数据或统计报表的内容存储到缓存中。 2. **响应信息来自缓存**:后续访问时,系统首先检查缓存中的相应内容,如果存在有效缓存,则直接...

    用OSCache进行缓存对象

    1、OSCache是什么? 2、OSCache的特点 3、有关“用OSCache进行缓存对象”的研究

    oscache-2.1.1-full.zip_full_oscache_oscache 2_oscache2

    1. **docs**: 包含osCache的文档,包括用户手册、API参考等,是学习和理解osCache功能的重要资源。 2. **src**: 源代码目录,提供了osCache的全部源代码,便于开发者深入研究和定制。 3. **www.pudn.com.txt**: ...

Global site tag (gtag.js) - Google Analytics