今天在使用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>
分享到:
相关推荐
OSCache作为一款广泛使用的缓存框架,主要解决了Java应用中的数据重复计算和加载问题,从而显著提高系统响应速度。其特性包括但不限于: 1. 缓存任何对象:无论是部分JSP页面、HTTP请求,还是自定义的Java对象,...
在这个"OSCache学习例子 实例"中,我们将深入探讨如何在J2EE环境中集成并使用OSCache。 首先,理解OSCache的基本概念至关重要。OSCache的核心功能是提供内存中的对象缓存,它支持两种主要的缓存模式:本地缓存和...
osCache的核心功能是提供了一个内存中的对象缓存系统,通过将常用数据暂存到内存中,避免了频繁的数据库查询,从而显著提升应用程序的性能。 在开始配置osCache之前,我们需要了解其基本概念和工作原理。osCache...
OSCache 是一个高效的、开源的缓存框架,主要用于 Java 应用程序,它提供了一种在内存中存储对象的方式,以提高数据访问速度并减轻数据库的负载。在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,...
6. **集成到JSP页面**:在JSP页面中引入Oscache标签库,使用`<%@taglib uri="oscache" prefix="cache"%>`声明,其中`uri`值应与`web.xml`中配置的`<taglib-uri>`一致。 7. **实现缓存逻辑**:在JSP页面中利用...
在本文中,我们将深入探讨osCache的基本概念、工作原理以及如何在实际项目中进行配置和使用。 一、osCache基本概念 osCache的核心理念是将数据存储在内存中,以减少对数据库或其他资源的频繁访问,从而提高系统的...
当 web 应用与数据库通信出现问题时,OSCache 可以使用缓存内容向用户提供服务,从而赢得时间进行系统维护或采取其他补救措施。 **三、OSCache 组件的安装** 安装 OSCache 主要涉及对 web 应用的配置。一般步骤...
osCache是Java开发中常用的缓存框架之一,它主要用于提高应用程序的性能和效率,通过将数据存储在内存中,减少对数据库的访问。osCache不仅可以用于Web应用,也可以用于任何Java应用程序,支持集群环境,提供了丰富...
oscache-2.1.jar oscache-2.1.jar
为了解决这个问题,我们可以利用OsCache来缓存最近查询过的天气信息,当有新的查询请求时,首先检查缓存中是否存在该数据,如果存在则直接返回,无需再次调用外部服务。 具体实现步骤如下: 1. 引入OsCache依赖:...
- 配置osCache插件:首先需要将osCache的jar包添加到项目类路径中,然后在struts.xml配置文件中引入osCache拦截器,并配置相应的拦截规则。 2. **iBatis与osCache**: - iBatis是一个轻量级的持久层框架,它允许...
OSCache基于内存的缓存系统能够将经常访问的数据存储在内存中,避免了每次请求时都需要从数据库中获取数据的开销。通过缓存热点数据,它可以显著提升Web应用的响应速度,降低延迟,提高用户体验。 2. **JSP定制...
对于osCache来说,这个文件可能会解释如何配置和集成osCache到项目中,以及如何解决常见问题。 3. **etc**:这个目录可能包含了配置文件,如`oscache.properties`,用于设置缓存的行为,例如缓存大小、过期策略、...
- **添加依赖**: 在Java项目中,需要将osCache的JAR文件添加到类路径中,或者在Maven/Gradle项目中添加对应的依赖配置。 - **配置文件**: `oscache.xml`是osCache的主要配置文件,包含缓存区域定义、缓存策略等设置...
然而,使用oscache时也需要注意一些问题。例如,缓存的大小设置需要根据系统的内存资源和数据特性来确定,过大可能导致内存溢出,过小则可能无法充分利用缓存的优势。此外,缓存数据的更新策略需谨慎设计,以免出现...
- **缓存对象**:osCache允许开发者将任何Java对象存储到缓存中,以便后续请求可以直接从内存中获取,而无需再次进行昂贵的数据库查询或其他计算操作。 - **缓存区域**:osCache支持多个缓存区域,每个区域可以有...
javaweb做页面缓存常用,OSCache是一个工业级的J2EE缓存实现。OSCache不但能缓存java对象,还可以缓存页面,http请求和二进制内容,例如pdf文件等。通过应用OSCache,我们不但可以实现通常的Cache功能,还能够改善...
OSCache是OpenSymphony这个开源项目众多Projects中的一个。他是一个高效的J2EE缓存框架,能够很好的解决动态网站速度的问题。