`

ehcache初学

阅读更多

 初次学习cache接触到的Ehcache这个框架。缓存这个概念只让我想起hibernate里面的缓存,不过这都是hibernate自己做的,和自己都没什么关系。为什么要用到缓存,这个貌似应该都知道。
  首先接触Ehcache没有往学习Ehcache的一些基本东西,反而是看整个系统是怎么用它的。
  系统刚跑起来的时候数据不是很多,全部查找出来放进到缓存里面,对每个bean对象都建立了2个缓存。刚开始不知道Ehcache是怎么存的,但是看代码明白有Key,Value二个,key存放id,value存放相应的bean,这就是一个缓存。另一个了,key放条件,value放id。想了好久才明白为什么创建2个,感觉这样挺好的。
  数据放进了Ehcache里面后,该是查数据的时候了。查数据是怎么的顺序了?首先是根据条件查询存放id的那个缓存,假如查询出来的id值不为空,则获得一个listid,然后遍历list,得到id往查询存放bean的缓存。如查到的id为空,则根据条件往存放bean的缓存里往查(查到后,还记得要把条件和id放到缓存里面往)。若根据id往查,和根据条件往查都没有的话,就只能往查数据库了,查完后要把查得到都要放到那二个缓存里面往,这就是查询的逻辑。
  数据放进缓存后,缓存的数据不应该是不变的,由于数据库的数据要更新,那么缓存的数据也应该更新。那怎么做呢?不知道应用的是否观察者模式,但挺像的,对各个bean对象监听起来,监察是否对数据库有改变,那具体监测哪一块了?数据发生变化那么大家肯定会想到事物,数据要提交到数据库里,肯定要调用的transaction,所以在调用commit()方法时,那么就可以通知到相对应bean的缓存了,及时更新。大家初学语言的时候都碰到过这个题目,值传递和引用传递,引用传递在方法里面改变了值,那引用对象的值也变了,涉及到缓存也一样,你从缓存获取出来的对象都是引用类型的,你临时取出来用一下,改变了值,那么缓存也变了,可是数据库没变啊,所以有时结果就出错了,记得取出来的对象一定要重新new一个(把旧对象的值赋值给新的)。

  简单的缓存应用大概是这样的了,我所知道的。 该是要把Ehcache给了解一下了,ehcache若简单应用,实在很轻易。主要学会2个地方,ehcache.xml和EQL。
  首先我说下ehcache.xml
 

<ehcache>
    <diskStore path="java.io.tmpdir"/>
    <defaultCache maxElementsInMemory="10000" eternal="false"
                  overflowToDisk="false" timeToLiveSeconds="180"
                  diskPersistent="false" diskExpiryThreadIntervalSeconds="120" />
    <cache name="PersonBean"
                  memoryStoreEvictionPolicy="LRU"
                  maxElementsInMemory="10000" overflowToDisk="false" eternal="true">
       <searchable>
           <searchAttribute name="N" expression="value.getName()"/>
       </searchable>
    </cache>
</ehcache>
  


diskStore缓存数据文件创建的地方
maxElementsMemory缓存中可以存放的最大元素量,若overflowToDisk为true,超过了则写到磁盘中,一般不会这样做。若为false则按Eviction的策略来替换元素
eternal设置元素是否永恒,则超时策略被忽略,就是timeLive和timeToIdle这二个失效。但仍然遵守替换原则
overflowToDisk设置元素超出最大量时是否保存在磁盘中
timeLiveSeconds设置元素生存时间,到时就被销毁,默认是没有限制
timeToIdleSeconds设置元素空闲时间,意思是一直没有被访问,到达这个时间则销毁,默认没限制
memoryStoreEvictionPolicy设置缓存替换策略,这让我想起了上操纵系统这门课时,老师给我们讲的,现在还真的要用上了。
  LRU:least recently used 最近最少使用
  LFU:least frequently used 最不经常使用
  FIFO:first in first out 先进先出
searchAttribute定义查找属性
在工程里我定义了PersonBean这个类,包含了id,name,year,***属性及其get,set方法。我直接用PersionBean这个名字做为缓存的名字,而这个缓存就是存放PersonBean对象,所以在expression中name的值是value.getName()。

看一下Ehcache的简单代码

CacheManager cacheManager = CacheManager.getInstance();
Ehcache ehcache = cacheManager.getEhcache("PersonBean");
PersonBean perb = new PersonBean();
perb.setId(1);
perb.setName("liuq");
ehcache.put(new Element(1,perb));
Element element = ehcache.get(1);
Object object = element.getObjectValue();


从代码里大家可以看见Ehcache存放的结构。Ehcache治理很多cache,而我们的需要存放的东西是用Element存放在cache中的,以key,value的形式。cache的创建可以写在配置文档里,也可以用编码实现,不过建议是写在文档里,直观。在调用CacheManager.getInstance()时,会自动到src目录下找,名字必须为ehcache.xml.
创建CacheManager还有其它方法,这就看API可以知道。慢慢的越来越发现API是个好东西,以前都是直接看别人写出来,实在还不如自己看API,要养成好习惯。

然后再看一下对cache的查询

Query query = ehcache.createQuery().includeKeys().includeValues();
//Attribute n = ecache.getSearchAttribute("N");
//Criteria c = n.eq("liuq");
//query.addCriteria(c);
query.addCriteria(new Attribute("N").eq("liuq")).end();
//query.addCriteria(Query.KEY.eq(1)).end();  
Results result = query.execute();
for (Result re : result.all()) {
   PersonBean pb = (PersonBean) re.getValue();
   System.out.println(pb.getName());
}     


在Ehcache中查询,也叫EQL。大家可以往官网看一下具体的先容http://ehcache.org/documentation/apis/search,只是官网是英语的,需要你花时间,但很多东西,看官网的还是觉得好一些。EQL查询步骤实在很简单,创建一个Query,加进查询条件,最后执行得到结果,复杂的是你的查询条件。要做EQL,必须要加进searchable属性,不然会出错的。大家可以看到Attribute是我定义在searchable里面,expression就是类中的getName(),这样才能够得到liuq这个值往匹配。还有其中includeKeys,和includeValues记得加进往,由于re.getKey和re.getValue需要。

  这仅仅是一个简单的了解,至于应用还没怎么学会,需要继续努力学,然后分享更多的知识,若有不对的地方,希看大家能及时指出来。

 

本文转自 http://www.csdnjava.com/forum.php?mod=viewthread&tid=34855 

分享到:
评论

相关推荐

    初学ehcache,3分钟搞定。

    ### ehcache基础知识与实践 #### 一、ehcache简介 ...通过以上内容的学习,相信初学者已经对ehcache有了初步的了解。接下来可以通过更多的实践来深入掌握ehcache的高级特性及其在复杂场景下的应用技巧。

    ehcachedemo

    本示例项目“ehcachedemo”是为了帮助开发者快速理解和应用Ehcache,不论你是资深的架构师还是初学者,都能从中受益。 在“ehcachedemo”项目中,你将看到以下关键知识点: 1. **Ehcache的安装与配置**:Ehcache...

    ehcache-2.10.3-distribution.tar.gz

    3. **帮助文档**: 包含了关于如何使用Ehcache、配置选项、API参考等信息,对初学者和经验丰富的开发者来说都是宝贵的资源。 Ehcache的主要特性包括: - **内存管理**:自动管理缓存中的对象,当内存达到预设限制时...

    ehcache学习文档

    ### Ehcache学习文档知识点梳理 ...无论是初学者还是有一定经验的开发者,都能从中获得有价值的信息和技术指导。通过本文档的学习,开发者不仅能够掌握Ehcache的核心技术,还能了解其在实际项目中的最佳实践。

    简单介绍Ehcache的优缺点

    1. **复杂性与学习曲线**:虽然Ehcache提供了丰富的功能,但对于初学者而言,理解和掌握其所有特性可能需要一定的时间和精力。 2. **磁盘缓存的限制**:虽然Ehcache支持磁盘缓存,但在频繁的读写操作下,磁盘I/O...

    RMI+EHCACHE Demo

    【RMI+EHCACHE Demo】是一个面向初学者的示例项目,旨在帮助理解如何结合Remote Method Invocation(远程方法调用)和Ehcache缓存技术。这个Demo将展示如何利用RMI来创建分布式系统,并利用Ehcache进行高效的数据...

    springMVC入门教程,集成了缓存、安全框架

    springMVC做的小项目,springMVC+...jar包全,代码也全,结构清晰明了,非常适合springMVC初学者、ehcache初学者、shiro初学者。shiro除了做认证以及授权外,还做了并发登录控制,多个人登录同一个账号,踢出前者。

    ehcache-2.7.3-distribution.tar.gz

    **标题与描述解析** 标题"ehcache-2.7.3-distribution.tar.gz"表明这是一个包含EHCache ...这些文档和资源为学习和使用EHCache提供了丰富的材料,无论是初学者还是经验丰富的开发者,都能从中获取到有价值的指导。

    ehcache官方文档2.9

    总之,Ehcache 2.9官方文档详尽地介绍了如何配置、使用和优化缓存,无论是初学者还是高级开发者,都能从中受益匪浅。通过学习这份文档,我们可以更好地理解缓存机制,提升应用性能,并有效地应对高并发和大数据量的...

    ehcache官方教程

    ### Ehcache官方教程知识点概述...以上内容全面覆盖了 Ehcache 的各个方面,无论是初学者还是有经验的开发人员都能从中获益匪浅。通过学习这些知识点,开发者可以更加熟练地使用 Ehcache,提高应用程序的性能和稳定性。

    maven整合ssh框架、ehcache搭建、可直接运行导入运行

    这个压缩包文件提供的内容应该是已经完成了上述整合和配置的项目,可以直接导入到IDE中运行,对于初学者来说,这是一个很好的学习和实践SSH框架与Maven整合的实例。通过查看和分析代码,可以深入理解各个组件如何...

    maven整合SSH框架、 ehcache搭建、 可直接运行导入运行

    配置Ehcache通常包括添加jar依赖,创建缓存配置文件ehcache.xml,并在代码中调用Ehcache API进行数据缓存和检索。 “可直接运行导入运行”意味着这个压缩包提供了一个完整的、可以直接运行的项目,无需额外的设置或...

    ehcache 例子+文档

    在“ehcache学习的例子”中,初学者可以通过实际操作理解Ehcache的基本用法。首先,我们需要理解Ehcache的核心概念:缓存、缓存管理器、缓存区域和缓存元素。 1. 缓存:缓存是Ehcache的基本单元,存储键值对数据。...

    ehcache实例

    Ehcache是一个开源的Java分布式缓存框架,广泛应用于提高应用程序性能和减少数据库负载。...这个实例中的源码应该包含了Ehcache的配置、使用以及与Spring的集成示例,对初学者来说是一份宝贵的学习资源。

    axis webservic ehcache.zip

    总之,"axis webservic ehcache.zip"是一个帮助初学者理解和实践Axis Web服务与Ehcache集成的资源包,通过学习和运行其中的示例,开发者可以掌握如何利用缓存技术提升Web服务的效率和响应速度。

    ehcache文档(英文版)

    ### ehcache文档(英文版):深入解析缓存机制与应用 #### 深入理解ehcache缓存原理 Ehcache是一款广泛应用...无论是初学者还是有经验的开发人员,都能从中获得宝贵的见解和实用的技能,以提高自己项目的性能和稳定性。

    ehcache缓存技术

    对于初学者来说,可以从以下几个步骤入手学习Ehcache: 1. **安装和导入**:首先需要下载Ehcache的JAR包,然后将其添加到项目的类路径中。 2. **配置Ehcache**:创建XML配置文件,定义缓存的大小、过期策略、持久化...

    springmvc+jpa+theamleaf+Ehcache

    这个DEMO为初学者提供了一个良好的实践平台,展示了如何整合这些流行的技术来构建Web应用。通过学习和实践这个DEMO,开发者可以更好地理解Spring MVC的请求处理流程,JPA的数据操作,Thymeleaf的模板渲染,以及...

    ehcache-memcache-redis三大缓存男高音.docx

    标题中的“ehcache-...初学者在学习这三种缓存时,应当尝试搭建和运行它们的示例,理解它们的工作原理和使用场景。实际项目中,选择哪种缓存取决于具体需求,如数据规模、性能要求、持久化需求、语言兼容性等因素。

Global site tag (gtag.js) - Google Analytics