`

osCache的问题,不解中

阅读更多
今天在使用spring-cache和osCache时发现了一个问题,当缓存目标方法发生异常时,会死锁。就是updateState.wait();造成的。在此做个标记,以后研究。目前使用EHCache就没有类似的问题发生
com.opensymphony.oscache.base.Cache#getFromCache
// Another thread is already updating the cache. We block if this
// is a new entry, or blocking mode is enabled. Either putInCache()
// or cancelUpdate() can cause this thread to resume.
if (cacheEntry.isNew() || blocking) {
    do {
        try {
            updateState.wait();
        } catch (InterruptedException e) {
        }
    } while (updateState.isUpdating());
    
    if (updateState.isCancelled()) {
        // The updating thread cancelled the update, let this one have a go. 
        // This increments the usage count for this EntryUpdateState instance
        updateState.startUpdate();
        
        if (cacheEntry.isNew()) {
            accessEventType = CacheMapAccessEventType.MISS;
        } else {
            accessEventType = CacheMapAccessEventType.STALE_HIT;
        }
    } else if (updateState.isComplete()) {
        reload = true;
    } else {
        log.error("Invalid update state for cache entry " + key);
    }
}

附上使用EHCache基于AOP方式的缓存配置文件,权当日记吧,算不上总结。
<!-- EHCache AOP -->
<bean id="eHCacheInterceptor"
	class="org.springframework.aop.interceptor.cache.EHCacheInterceptor" scope="singleton">
	<property name="refreshPeriods">
		<value>600</value>
	</property>
	<property name="defaultRefreshPeriod">
		<value>900</value>
	</property>
	<property name="identifiers">
        <props>
      		<prop key="java.util.Map">toString</prop>
        </props>
      </property>
</bean>
<bean id="eHCacheAdvisor"
	class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
	<property name="advice">
		<ref bean="eHCacheInterceptor" />
	</property>
	<property name="patterns">
		<list>
			<value>.*search.*</value>
			<value>.*get.*</value>
			<value>.*find.*</value>
		</list>
	</property>
</bean>
<bean id="eHCacheProxyCreator"
	class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	<property name="beanNames">
		<value>*Service</value>
	</property>
	<property name="interceptorNames">
		<list>
			<value>eHCacheAdvisor</value>
		</list>
	</property>
	<property name="proxyTargetClass">
		<value>true</value>
	</property>
</bean>
分享到:
评论
1 楼 q512871740 2012-06-20  
try {
return cache.getFromCache(key);
} catch (NeedsRefreshException e) {
//bug 当第二次 报错时,线程将无限等待(死锁)
cache.cancelUpdate(key);
}


key的内容不存在,调用会进入等待....bug

这是我的代码

相关推荐

    OSCache配置说明文档

    OSCache作为一款广泛使用的缓存框架,主要解决了Java应用中的数据重复计算和加载问题,从而显著提高系统响应速度。其特性包括但不限于: 1. 缓存任何对象:无论是部分JSP页面、HTTP请求,还是自定义的Java对象,...

    OSCache学习例子 实例

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

    oscache缓存配置

    osCache的核心功能是提供了一个内存中的对象缓存系统,通过将常用数据暂存到内存中,避免了频繁的数据库查询,从而显著提升应用程序的性能。 在开始配置osCache之前,我们需要了解其基本概念和工作原理。osCache...

    OSCache需要的包

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

    Oscache框架的搭建步骤

    6. **集成到JSP页面**:在JSP页面中引入Oscache标签库,使用`&lt;%@taglib uri="oscache" prefix="cache"%&gt;`声明,其中`uri`值应与`web.xml`中配置的`&lt;taglib-uri&gt;`一致。 7. **实现缓存逻辑**:在JSP页面中利用...

    oscache缓存技术入门实例

    在本文中,我们将深入探讨osCache的基本概念、工作原理以及如何在实际项目中进行配置和使用。 一、osCache基本概念 osCache的核心理念是将数据存储在内存中,以减少对数据库或其他资源的频繁访问,从而提高系统的...

    oscache详细配置文档

    当 web 应用与数据库通信出现问题时,OSCache 可以使用缓存内容向用户提供服务,从而赢得时间进行系统维护或采取其他补救措施。 **三、OSCache 组件的安装** 安装 OSCache 主要涉及对 web 应用的配置。一般步骤...

    oscache-java缓存框架

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

    oscache-2.1.jar

    oscache-2.1.jar oscache-2.1.jar

    OsCache缓存框架使用示例

    为了解决这个问题,我们可以利用OsCache来缓存最近查询过的天气信息,当有新的查询请求时,首先检查缓存中是否存在该数据,如果存在则直接返回,无需再次调用外部服务。 具体实现步骤如下: 1. 引入OsCache依赖:...

    oscache处理

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

    oscache-2.4.1-full

    OSCache基于内存的缓存系统能够将经常访问的数据存储在内存中,避免了每次请求时都需要从数据库中获取数据的开销。通过缓存热点数据,它可以显著提升Web应用的响应速度,降低延迟,提高用户体验。 2. **JSP定制...

    oscache-2.2jar包

    对于osCache来说,这个文件可能会解释如何配置和集成osCache到项目中,以及如何解决常见问题。 3. **etc**:这个目录可能包含了配置文件,如`oscache.properties`,用于设置缓存的行为,例如缓存大小、过期策略、...

    oscache的使用实例和详解

    - **添加依赖**: 在Java项目中,需要将osCache的JAR文件添加到类路径中,或者在Maven/Gradle项目中添加对应的依赖配置。 - **配置文件**: `oscache.xml`是osCache的主要配置文件,包含缓存区域定义、缓存策略等设置...

    oscache对象缓存

    然而,使用oscache时也需要注意一些问题。例如,缓存的大小设置需要根据系统的内存资源和数据特性来确定,过大可能导致内存溢出,过小则可能无法充分利用缓存的优势。此外,缓存数据的更新策略需谨慎设计,以免出现...

    oscache缓存技术

    - **缓存对象**:osCache允许开发者将任何Java对象存储到缓存中,以便后续请求可以直接从内存中获取,而无需再次进行昂贵的数据库查询或其他计算操作。 - **缓存区域**:osCache支持多个缓存区域,每个区域可以有...

    oscache(JSP定制标记应用)

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

    oscache 使用介紹

    OSCache是OpenSymphony这个开源项目众多Projects中的一个。他是一个高效的J2EE缓存框架,能够很好的解决动态网站速度的问题。

Global site tag (gtag.js) - Google Analytics