`
234390216
  • 浏览: 10238549 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462883
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775974
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398733
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395157
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680170
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531136
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1185005
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468802
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151489
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68339
社区版块
存档分类
最新评论

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

阅读更多

Ehcache对并发的支持

 

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

       在Ehcache接口中为我们定义了几个与Read、Write锁相关的方法,具体方法如下所示:
public interface Ehcache {
 
    /**
     * 获取给定Key的Read锁
     * @param key
     */
    public void acquireReadLockOnKey(Object key);
 
    /**
     * 获取给定Key的Write锁
     * @param key
     */
    public void acquireWriteLockOnKey(Object key);
 
    /**
     * 尝试着获取给定Key的Read锁,如果在给定timeout时间内还没有获取到对应的Read锁,则返回false,否则返回true。
     * @param key
     * @param timeout 超时时间,单位是毫秒
     * @return表示是否获取到了对应的Read锁
     * @throws InterruptedException
     */
    public boolean tryReadLockOnKey(Object key, long timeout) throws InterruptedException;
 
    /**
     * 尝试着获取给定Key的Write锁,如果在给定timeout时间内还没有获取到对应的Write锁,则返回false,否则返回true。
     * @param key
     * @param timeout 超时时间,单位是毫秒
     * @return表示是否获取到了对应的Write锁
     * @throws InterruptedException
     */
    public boolean tryWriteLockOnKey(Object key, long timeout) throws InterruptedException;
 
    /**
     * 释放所持有的给定Key的Read锁
     * @param key
     */
    public void releaseReadLockOnKey(Object key);
 
    /**
     * 释放所持有的给定Key的Write锁
     * @param key
     */
    public void releaseWriteLockOnKey(Object key);
  
}

 

 

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

 

   @Test
   public void test() {
      CacheManager cacheManager = CacheManager.create();
      cacheManager.addCache("test");
      Cache cache = cacheManager.getCache("test");
      final String key = "abc";
      cache.acquireWriteLockOnKey(key);
      try {
         cache.put(new Element(key, "123"));
      } finally {
         System.out.println(cache.get(key));
         cache.releaseWriteLockOnKey(key);
      }
   }

 

 

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

 

 

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

0
3
分享到:
评论
2 楼 zhangleijava1 2015-10-24  
Remember that a value in a cache element is globally accessible from multiple threads. It is inherently not thread-safe to modify the value. It is safer to retrieve a value, delete the cache element, and then reinsert the value.
这个是官网上的说的。对于修改缓存中的数据不是线程安全的,但是对于取回值,删除值等等是线程安全的。
1 楼 di1984HIT 2014-10-30  
一定要释放所~~~

相关推荐

    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