`

Ehcache(07)——Ehcache对并发的支持

 
阅读更多

Ehcache对并发的支持

 

       在高并发的情况下,使用Ehcache缓存时,由于并发的读与写,我们读的数据有可能是错误的,我们写的数据也有可能意外的被覆盖。所幸的是Ehcache为我们提供了针对于缓存元素KeyRead(读)、Write(写)锁。当一个线程获取了某一KeyRead锁之后,其它线程获取针对于同一个KeyRead锁不会受到限制,但其它线程(包括获取了该KeyRead锁的线程)如果想获取针对同一个KeyWrite锁就不行,它需要等到针对于该KeyRead锁释放后才能获取其Write锁;当一个线程获取了某一KeyWrite锁之后,其它线程获取同一个KeyRead锁或者Write锁的请求将等待针对于该KeyWrite锁释放后才能继续进行,但是同一个线程获取该Key对应的Read锁或者Write锁将不需要等待。获取了对应的锁之后,记得在不再需要该锁后释放该锁。并且需要注意不要引起死锁。

Java代码   收藏代码
  1.        在Ehcache接口中为我们定义了几个与Read、Write锁相关的方法,具体方法如下所示:  
  2. public interface Ehcache {  
  3.    
  4.     /** 
  5.      * 获取给定Key的Read锁 
  6.      * @param key 
  7.      */  
  8.     public void acquireReadLockOnKey(Object key);  
  9.    
  10.     /** 
  11.      * 获取给定Key的Write锁 
  12.      * @param key 
  13.      */  
  14.     public void acquireWriteLockOnKey(Object key);  
  15.    
  16.     /** 
  17.      * 尝试着获取给定Key的Read锁,如果在给定timeout时间内还没有获取到对应的Read锁,则返回false,否则返回true。 
  18.      * @param key 
  19.      * @param timeout 超时时间,单位是毫秒 
  20.      * @return表示是否获取到了对应的Read锁 
  21.      * @throws InterruptedException 
  22.      */  
  23.     public boolean tryReadLockOnKey(Object key, long timeout) throws InterruptedException;  
  24.    
  25.     /** 
  26.      * 尝试着获取给定Key的Write锁,如果在给定timeout时间内还没有获取到对应的Write锁,则返回false,否则返回true。 
  27.      * @param key 
  28.      * @param timeout 超时时间,单位是毫秒 
  29.      * @return表示是否获取到了对应的Write锁 
  30.      * @throws InterruptedException 
  31.      */  
  32.     public boolean tryWriteLockOnKey(Object key, long timeout) throws InterruptedException;  
  33.    
  34.     /** 
  35.      * 释放所持有的给定Key的Read锁 
  36.      * @param key 
  37.      */  
  38.     public void releaseReadLockOnKey(Object key);  
  39.    
  40.     /** 
  41.      * 释放所持有的给定Key的Write锁 
  42.      * @param key 
  43.      */  
  44.     public void releaseWriteLockOnKey(Object key);  
  45.     
  46. }  

 

 

       我们常用的Cache类已经为我们实现了这些方法,我们可以直接在程序中进行使用。以下是直接在程序中使用锁的一个简单示例。

 

Java代码   收藏代码
  1. @Test  
  2. public void test() {  
  3.    CacheManager cacheManager = CacheManager.create();  
  4.    cacheManager.addCache("test");  
  5.    Cache cache = cacheManager.getCache("test");  
  6.    final String key = "abc";  
  7.    cache.acquireWriteLockOnKey(key);  
  8.    try {  
  9.       cache.put(new Element(key, "123"));  
  10.    } finally {  
  11.       System.out.println(cache.get(key));  
  12.       cache.releaseWriteLockOnKey(key);  
  13.    }  
  14. }  

 

 

       记得需要在合适的时候释放所获取的锁。

 

(注:本文是基于ehcache2.8.1所写)

摘自:http://haohaoxuexi.iteye.com/blog/2119733

分享到:
评论

相关推荐

    Mybatis入门实例(二)——添加ehcache缓存支持

    在本篇《Mybatis入门实例(二)——添加ehcache缓存支持》中,我们将深入探讨如何在Mybatis框架中集成Ehcache作为二级缓存,以提高数据访问的效率和性能。Ehcache是一个开源的Java分布式缓存,广泛用于缓存应用程序中...

    Ehcache缓存

    第二级缓存可以存储更多数据,减少对数据库的依赖,提高并发性能。 **Ehcache的工作原理** Ehcache的工作基于“Least Recently Used”(LRU)策略,即最近最少使用的数据会被首先移出缓存,以腾出空间给新的数据。...

    ehcache-core-2.6.11.jar

    这里我们关注的是Ehcache的核心库,具体是三个不同版本——ehcache-core-2.6.11,ehcache-core-2.6.9,以及ehcache-core-2.5.0。 1. Ehcache核心功能: Ehcache的核心功能包括内存缓存、磁盘缓存、分布式缓存以及...

    ehcache和memcache性能比较

    本文将详细探讨两种广泛使用的缓存解决方案——Ehcache和Memcached,它们都是为了减少对数据库的直接访问,从而提升系统的响应速度。我们将从性能、特性、适用场景等方面进行比较。 首先,Ehcache是一款基于Java的...

    memcached完全剖析ehcache memcached redis 缓存技术总结

    标题“memcached完全剖析ehcache memcached redis 缓存技术总结”表明,这篇内容将深入探讨三种流行的缓存技术——Memcached、Ehcache和Redis。缓存是IT行业中用于提高系统性能的关键技术,尤其是在大数据量和高并发...

    Ehcache+xmemcached+redis 整合spring注解demo

    本项目" Ehcache+xmemcached+redis 整合spring注解demo"旨在演示如何将这三种主流的缓存技术——Ehcache、xmemcached和Redis——与Spring框架的注解功能相结合,以实现高效、灵活的缓存管理。以下是对这些知识点的...

    缓存技术详解

    2. **对并发要求不是非常严格的场景**:由于Ehcache的分布式缓存机制并不是实时同步的,因此适用于对数据一致性要求不高的场景。 #### 四、Ehcache的基本配置 Ehcache的配置文件`ehcache.xml`定义了缓存行为的核心...

    mybatis第三方缓存需要的文件.zip

    在这个名为 "mybatis第三方缓存需要的文件.zip" 的压缩包中,包含的是 MyBatis 整合第三方缓存——EhCache 的相关组件和配置文件。 首先,我们要了解 EhCache 是一个开源的 Java 缓存库,它可以被用于存储和检索...

    jivejdon——3.1

    《JiveJdon——3.1:Java学习的宝贵资源》 在编程世界里,Java是一种广泛应用的编程语言,尤其在企业级应用开发领域占据着举足轻重的地位。"JiveJdon"是一个专为Java爱好者和学习者提供的论坛源代码,它为我们提供...

    ehcachememcacheredis三大缓存男高音.pdf

    【描述】:本文将深入探讨三个广泛使用的缓存系统——Ehcache、Memcached 和 Redis,分析它们的特点、优缺点以及适用场景,帮助读者理解这三大“缓存男高音”的差异,并提供实践建议。 【标签】:互联网 【正文】...

    金民一期婚姻管理测试系统_开发框架功能点-分布式缓存.pdf

    本文将深入探讨该系统中采用的分布式缓存——Ehcache,以及其在系统中的应用与配置。 1. **Ehcache介绍** Ehcache是一款开源、高性能、轻量级的Java缓存库,广泛应用于Java应用程序中,提供本地内存缓存和分布式...

    分布式缓存架构1.docx

    ### 分布式缓存架构——Spring Boot搭建Ehcache+Redis的二级缓存 #### 一、引言 随着互联网应用的不断普及和发展,对于数据处理能力的要求越来越高,特别是对于那些高并发、低延迟的应用场景而言,缓存技术成为了...

    memcache、redis、tair性能对比测试报告.docx

    该测试报告主要对比分析了三种流行的分布式缓存系统——memcache、redis和tair在不同条件下的性能表现,以供选择适合特定需求的缓存解决方案。测试场景涵盖了单机环境和分布式环境,关注点在于缓存数据的设置和获取...

    JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计.zip

    为了优化性能和用户体验,可能还会涉及到缓存技术,如Ehcache或Redis,用于存储频繁访问的数据,减少对数据库的直接访问。 此外,考虑到移动设备的网络环境可能不稳定,系统的响应时间和数据传输量都是需要考虑的...

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8).docx

    《通用后台管理系统——基于ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8的高效框架》 本通用后台管理系统是一款高效、稳定且灵活的开发框架,适用于构建OA、网站、电子政务、ERP、CRM、APP后台等多种B/S架构的应用...

    java cache 简单应用

    3. **Ehcache**:Ehcache是一款广泛使用的开源Java缓存解决方案,支持内存和磁盘存储,具有线程安全、分布式缓存等功能。它可以与Spring框架无缝集成,非常适合大型项目。 4. **JCache (JSR-107)**:Java Caching ...

    超市订单系统(oracle和mysql素材)

    《超市订单系统——基于Oracle与MySQL的实现》 在当今数字化时代,超市订单系统的构建对于提升零售业务效率、优化客户体验具有重要意义。本系统利用先进的技术框架,如Spring、SpringMVC、MyBatis,以及第三方缓存...

    memcache redis tair 性能测试报告

    这份报告详细对比了三种常用的内存数据库——memcache、redis以及tair的性能表现。测试目的是为了评估这些缓存工具在不同场景下的处理能力,特别是在并发操作和不同大小的数据存储上的效率。测试环境包含了单机环境...

    校六后台架构

    综上所述,**校六后台架构**通过精心设计的技术方案和合理的服务器配置,实现了对高并发、高可用性以及集群可扩展性的有效支持。这一架构不仅确保了“校六”移动社交应用的稳定运行,也为类似项目的开发提供了宝贵的...

    SpringBoot开发文档综合整理文档

    Spring Boot 提供了对多种缓存技术的支持,包括但不限于 Redis、Ehcache、Caffeine 等。缓存技术可以帮助提高应用性能,减轻数据库压力。 #### 其他内容 - **定时任务**:通过 `@Scheduled` 注解或使用 Quartz 等...

Global site tag (gtag.js) - Google Analytics