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

EhCache addCacheIfAbsent

 
阅读更多

在项目用到 EhCache  来cache 从数据库中query 出来的reference 数据。 按理说ehcahce 非常成熟了但是在用的它的addCacheIfAbsent  api 时, 居然碰到它不是线程安全的。 从它api 字面上来说绝对不应该是线程不安全的, 放狗一搜果然是个bug。 这么低级的bug 还是在最新的版本2.7.0 才fix。  但是我们项目只用到它的ehcache-core.jar 不想用太多它的特性, 下了个 ehcache-core.2.6.9.jar 来看看 release 日期是 2041-4-8  但愿没有问题哈。  

 

在它的网站上找的bug 的链接 https://jira.terracotta.org/jira/browse/EHC-970, 其中有段测试代码。 其中的代码居然有问题, 所以就改下 放到这个地方看看有没有大家需要的。 

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicLong;

import net.sf.ehcache.CacheManager;
import net.sf.ehcache.config.CacheConfiguration;
import net.sf.ehcache.config.Configuration;

import org.junit.Test;

  
public class EhcacheTest {  
  
    private static final String CACHE_NAME = "test-cache";  
    private  CacheManager cm ; //= CacheManager.getInstance();  
    private final AtomicLong counter = new AtomicLong(0L);
     
	private int		maxEntriesLocalHeap	= 20000;

	private long	maxBytesLocalHeap	= 1024 * 1024 * 100;

	private boolean	isExpiryTimeFixed	= true;

	private int		timeToIdleSeconds	= 30 * 1000;

	private int		timeToLiveSeconds	= 30 * 1000;

	private boolean	overflowToOffHeap	= false;

	private boolean	eternal				= false;


	public Configuration getEhcacheConfig() {
		
		CacheConfiguration dcc = new CacheConfiguration();
		dcc.setMaxEntriesLocalHeap(maxEntriesLocalHeap);
		if (maxEntriesLocalHeap == 0) {
			dcc.setMaxBytesLocalHeap(maxBytesLocalHeap);
		}
		dcc.setTimeToIdleSeconds(timeToIdleSeconds);
		dcc.setTimeToLiveSeconds(timeToLiveSeconds);
		dcc.setOverflowToOffHeap(overflowToOffHeap);
		dcc.setEternal(eternal);

		Configuration configuration = new Configuration();
		configuration.setDefaultCacheConfiguration(dcc);
		
		configuration.setUpdateCheck(false);//application instant can not connect web site

		return configuration;
	}
    
    @Test  
    public void test_10000_Executions() throws InterruptedException {  
        final Executor executor = Executors.newFixedThreadPool(10);
        
    	cm = CacheManager.create(getEhcacheConfig());
        
        for (int i = 0; i < 100000; i++) {  
            executor.execute(new CreateAndRemoveCache());  
            if ((i%1000) == 0) {  
                  
            }  
                  
              
        }  
        
        while(counter.get() < 100000) {
           Thread.sleep(1000L);
           System.out.println("i=" + counter.get());
        }  
    }  
  
    public class CreateAndRemoveCache implements Runnable {  
  
        public CreateAndRemoveCache() {  
        }  
  
        @Override  
        public void run() {  
              
            cm.addCacheIfAbsent(CACHE_NAME);  
            cm.removeCache(CACHE_NAME);  
            counter.addAndGet(1);
        }  
    }  
}  

 

这段代码在 2.5.1 下会抛出 Item 已经存在的exception , 在 2.6.9 就不会。  好吧, 就暂时升级jar 来fix 这个问题把。

 

分享到:
评论

相关推荐

    ehcache监控工具ehcache-monitor-kit-1.0.3

    1.解压缩到目录下,复制ehcache-monitor-kit-1.0.0\lib\ehcache-probe-1.0.0.jar包到application的web-inf/lib目录下 2.将以下配置copy的ehcache.xml文件的ehcache标签中,注:上述链接中说的配置少写了个probe包名...

    ehcache.xsd_ehcache.xml代码提示.rar

    【标题解析】:“ehcache.xsd_ehcache.xml代码提示.rar”这个标题表明这是一个与Ehcache缓存系统相关的资源包,主要目的是为Ehcache的配置文件ehcache.xml提供代码提示功能。Ehcache是一个广泛使用的开源Java缓存...

    ehcache-3.3.1-API文档-中文版.zip

    赠送jar包:ehcache-3.3.1.jar; 赠送原API文档:ehcache-3.3.1-javadoc.jar; 赠送源代码:ehcache-3.3.1-sources.jar; 赠送Maven依赖信息文件:ehcache-3.3.1.pom; 包含翻译后的API文档:ehcache-3.3.1-javadoc-...

    Ehcache 简单的监控

    Ehcache是一个开源的、高性能的缓存解决方案,广泛应用于Java应用程序中,以提高数据访问的速度和效率。本文将深入探讨Ehcache的简单监控,帮助开发者更好地理解其工作原理和性能状态。 首先,了解Ehcache的核心...

    ehcache.jar及源码

    Ehcache是一个广泛使用的开源Java缓存库,它为应用程序提供了高效的内存管理和数据缓存功能。Ehcache的核心目标是提高应用性能,通过将频繁访问的数据存储在内存中,减少对数据库的依赖,从而降低系统负载。这次我们...

    Ehcache分布式缓存与其在SpringBoot应用

    Ehcache是一个高性能的、基于Java的进程内缓存解决方案,它被广泛应用于各种Java应用程序,包括Java EE和轻量级容器。Ehcache的主要优势在于它的快速响应、易用性和丰富的缓存策略。它提供了两种级别的缓存存储:...

    ehcache-3.9.9-API文档-中英对照版.zip

    赠送jar包:ehcache-3.9.9.jar; 赠送原API文档:ehcache-3.9.9-javadoc.jar; 赠送源代码:ehcache-3.9.9-sources.jar; 赠送Maven依赖信息文件:ehcache-3.9.9.pom; 包含翻译后的API文档:ehcache-3.9.9-javadoc-...

    hibernate+ehcache

    【标题】:“Hibernate + Ehcache 整合使用详解” 【描述】:“Hibernate 是一款流行的 Java 持久层框架,而 Ehcache 是一个高效的分布式内存缓存系统。将两者结合,能够极大地提升应用的性能,减少数据库的负载,...

    EHcache相关jar下载及案例

    EHcache是一款广泛使用的开源Java分布式缓存系统,主要设计用于提高应用程序的性能和可伸缩性。在Java应用程序中,特别是那些基于Hibernate或MyBatis的持久层框架中,EHcache作为二级缓存工具,能够显著提升数据访问...

    mybatis ehcache 1.0 ehcache.xsd 提示文件

    本篇文章将详细探讨MyBatis与Ehcache的集成以及`ehcache.xsd`和`ehcache.xml`这两个配置文件在其中的作用。 首先,Ehcache是一个开源的、高性能的Java缓存库,它能够极大地减少对数据库的访问,提高应用程序的响应...

    Ehcache 3(ehcache-clustered-3.8.1-kit.zip)

    Ehcache 3 是一个广泛使用的开源Java缓存解决方案,特别是在需要高性能、低延迟的数据存储和检索场景下。Ehcache 3 提供了丰富的功能,包括本地内存缓存、磁盘持久化、多线程支持以及在分布式环境中实现集群共享缓存...

    ehcache

    **Ehcache 知识详解** Ehcache 是一个开源的、高性能的缓存解决方案,广泛应用于Java应用程序中,尤其在提升系统性能和减少数据库负载方面表现突出。它支持内存和磁盘存储,并且可以与Java持久层框架如Hibernate、...

    ehcache2.6.5.rar

    Ehcache是一个开源的Java缓存库,广泛用于提高应用程序的性能和响应速度,通过存储经常访问的数据在内存中,避免了频繁的数据库查询。它最初由Tomi Triebel开发,现在是Terracotta公司的产品。在版本2.6.5中,...

    ehcache资料(包含ehcache jar包)

    **Ehcache** 是一个广泛使用的Java缓存库,它为应用程序提供了本地内存缓存功能,以提高数据访问速度和减少数据库负载。Ehcache在处理高并发和大数据量的场景下表现出色,尤其适用于那些频繁读取但不经常修改的数据...

    Ehcache(一): Spring + Ehcache开场白

    Ehcache是一款高性能、易用且广泛应用于Java环境中的分布式缓存系统,它极大地提高了应用程序的性能和响应速度。在Spring框架中集成Ehcache,能够实现数据的快速访问,减轻数据库的压力,优化整体系统架构。本文将...

    ehcache的配置参数详解

    ehcache是一种广泛使用的Java缓存框架,用于提高应用程序性能,特别是在数据访问操作中。通过将数据存储在内存中,ehcache能够显著减少数据库查询次数,从而加快应用响应速度。本文将深入探讨ehcache.xml配置文件中...

    SpringBoot 集成Ehcache实现缓存

    ### Spring Boot集成Ehcache实现缓存 #### 一、Ehcache简介 Ehcache是一个高效的纯Java进程内缓存框架,以其快速且轻便的特点而被广泛应用于各种应用场景中,尤其在Java EE和轻量级容器环境中更是受到青睐。...

    Ehcache通过Jgroups做集群

    Ehcache是一款高效、流行的Java缓存库,它允许应用程序快速访问经常使用的数据,从而提高性能和响应速度。在分布式环境中,为了实现数据共享和高可用性,Ehcache提供了集群功能。而Jgroups则是Java中一个强大的集群...

    ehcache开发工具包

    EhCache是一款高效、易用且功能强大的Java缓存库,它被广泛应用于各种Java应用程序中,以提高数据访问速度并降低数据库负载。EhCache的核心特性包括内存和磁盘存储、缓存分区、过期策略以及缓存同步等。在Java开发中...

    Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.tar

    Mybatis-ehcache 1.2.1 是一个集成项目,它将 Ehcache 缓存系统与 Mybatis 框架结合在一起,提供了一种高效、便捷的数据缓存解决方案。在这一版本中,Ehcache 被用作 Mybatis 的二级缓存,以改善数据库查询性能并...

Global site tag (gtag.js) - Google Analytics