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

EHCache学习笔记

阅读更多
EHCache 学习笔记     官方网站 http://ehcache.sourceforge.net/

  • EHCache 是一个纯java的,在Hibernate2.1充当可插入的在进程中的缓存。
  • 它具有以下特点:最小的依赖性,全面的文特性:快速,简单,丰富的文档和测试用例。
  • EHCache从1.2版本开始支持集群。(支持分布式,同步缓存)


EHCache的使用很简单:可以去http://www.blogjava.net/zyl/archive/2007/02/28/101208.html看看。

下面主要说下EHCache的集群:

分布式同步缓存要让这边的cache知道对方的cache,叫做Peer Discovery(成员发现)
EHCache实现成员发现的方式有两种:
第一,自动查找
自动的发现方式用 TCP 广播机制来确定和维持一个广播组。它只需要一个简单的配置可以自动的在组中添加和移除成员。在集群中也不需要什么优化服务器的知识,这是默认推荐的。
成员每秒向群组发送一个“心跳”。如果一个成员 5 秒种都没有发出信号它将被群组移除。如果一个新的成员发送了一个“心跳”它将被添加进群组。
任何一个用这个配置安装了复制功能的 cache 都将被其他的成员发现并标识为可用状态。
要设置自动的成员发现,需要指定ehcache配置文件中cacheManagerPeerProviderFactory元素的 properties属性,就像下面这样: 
peerDiscovery=automatic multicastGroupAddress=multicast address | multicast host name
multicastGroupPort=port timeToLive=0-255 (timeToLive属性详见常见问题部分的描述)
示例
假设你在集群中有两台服务器。你希望同步 sampleCache1 和 sampleCache2。每台独立的服务器都要有这样的配置:
配置 server1和 server2
<cacheManagerPeerProviderFactory 
 class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 
 properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, 
 multicastGroupPort=4446, timeToLive=32"/> 


第二,手动查找
进行手动成员配置要知道每个监听器的 IP 地址和端口。成员不能在运行时动态地添加和移除。在技术上很难使用广播的情况下就可以手动成员发现,例如在集群的服务器之间有一个不能传送广播报文的路由器。你也可以用手动成员发现进行单向的数据复制,只让server2 知道 server1而 server1 不知道 server2。
配置手动成员发现,需要指定 ehcache 配置文件中 cacheManagerPeerProviderFactory 的properties属性,像下面这样:
peerDiscovery=manual rmiUrls=//server:port/cacheName, ... rmiUrls 配置的是服务器 cache peers 的列表。注意不要重复配置。
示例
假设你在集群中有两台服务器。你要同步 sampleCache1 和 sampleCache2。下面是每个
服务器需要的配置:
配置 server1
<cacheManagerPeerProviderFactory 
 class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 
 properties="peerDiscovery=manual, 
 rmiUrls=//server2:40001/sampleCache11|//server2:40001/sampleCache12"/>

配置 server2
<cacheManagerPeerProviderFactory 
 class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 
 properties="peerDiscovery=manual, 
 rmiUrls=//server1:40001/sampleCache11|//server1:40001/sampleCache12"/>


给个完整的配置:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> 
<cacheManagerPeerProviderFactory class= 
"net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 
properties="peerDiscovery=manual, 
rmiUrls=//10.129.0.203:40000/UserCache ¦//10.129.0.203:40000/ReturnCache"/> 

<cacheManagerPeerListenerFactory 
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
properties="hostName=10.129.0.202,port=40000, socketTimeoutMillis=120000"/> 

<defaultCache 
maxElementsInMemory="10000" 
eternal="false" 
timeToIdleSeconds="120" 
timeToLiveSeconds="120" 
overflowToDisk="true" 
diskSpoolBufferSizeMB="30" 
maxElementsOnDisk="10000000" 
diskPersistent="false" 
diskExpiryThreadIntervalSeconds="120" 
memoryStoreEvictionPolicy="LRU" 
<cacheEventListenerFactory 
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/> 
/> 

<cache name="UserCache" 
maxElementsInMemory="1000" 
eternal="false" 
timeToIdleSeconds="100000" 
timeToLiveSeconds="100000" 
overflowToDisk="false"> 
<cacheEventListenerFactory 
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/> 
</cache> 



引用
属性解释:
必须属性:
        name:设置缓存的名称,用于标志缓存,惟一
        maxElementsInMemory:在内存中最大的对象数量
        maxElementsOnDisk:在DiskStore中的最大对象数量,如为0,则没有限制
        eternal:设置元素是否永久的,如果为永久,则timeout忽略
        overflowToDisk:是否当memory中的数量达到限制后,保存到Disk

可选的属性:
        timeToIdleSeconds:设置元素过期前的空闲时间
        timeToLiveSeconds:设置元素过期前的活动时间
        diskPersistent:是否disk store在虚拟机启动时持久化。默认为false
   diskExpiryThreadIntervalSeconds:运行disk终结线程的时间,默认为120秒
        memoryStoreEvictionPolicy:策略关于Eviction

缓存子元素:
   
    cacheEventListenerFactory:注册相应的的缓存监听类,用于处理缓存事件,如put,remove,update,和expire
    bootstrapCacheLoaderFactory:指定相应的BootstrapCacheLoader,用于在初始化缓存,以及自动设置。



  • 集群的作用有两方面吧,第一,负载分流。第二,安全性。

    在我看来,如果一个web应用的访问量不是很多的话,集群和非集群的效果相差不了多少,甚至有的时候集群会消耗更多的资源,导致垃圾回收频繁,内存占用率高等的现象。当然,如果访问量大,那当然是集群的效果会好很多。
         那在访问量小的时候是不是就不用做集群呢,答案是否定的。集群的另外一个好处就是数据和状态的安全性,EHCache会自动同步集群中服务器的缓存,当一台服务器挂掉后,另外的服务器可以马上接上来,防止用户状态数据丢失,所以,对安全性的保障是十分有效的。
分享到:
评论
1 楼 tgyd2006 2009-02-18  
此文作者,我想请教一个问题,我也是严格按照楼主这样配置的,可是,我在代码中去找缓存的对象是,两个应用的缓存对象是不一致的,也就是说分布式缓存没有起作用,不知道为什么?

相关推荐

    缓存框架-Ehcache学习笔记

    **缓存框架 Ehcache 学习笔记** Ehcache 是一个广泛使用的开源 Java 缓存框架,它在处理大量数据的高性能应用中扮演着重要角色。Ehcache 提供了本地内存缓存、磁盘存储以及分布式缓存的能力,使得应用程序能够快速...

    ehcache学习笔记

    ** Ehcache 学习笔记** Ehcache 是一个开源的 Java 缓存系统,它提供了在应用程序中存储和检索数据的高效方式,特别是在高并发环境下。这个笔记将深入探讨 Ehcache 的核心概念、配置和使用场景,以及如何通过源码...

    Spring Boot 学习笔记完整教程.pdf

    15. Spring Boot缓存集成:学习如何集成Spring Cache以及特定的缓存实现,例如Redis和EhCache。 16. Spring Boot分布式会话:了解如何在分布式环境中实现会话共享,这在构建集群应用时非常有用。 以上内容只是...

    ssh学习笔记

    根据提供的文件信息,可以看出这份学习笔记主要关注于SSH(Struts、Spring 和 Hibernate)框架的配置与使用。接下来,我们将详细解析这些知识点。 ### 一、Spring 框架依赖 Spring 是一个开源的轻量级Java开发框架...

    shiro学习笔记.rar

    本学习笔记主要涵盖了如何在Spring Boot项目中整合Shiro,并实现用户认证和授权,以及图片验证码的实现。 **1. Shiro 概述** Shiro 的核心组件包括 Realm(域)、Subject(当前操作用户)、Session Manager(会话...

    Hibernate 4 学习笔记

    **标题:** Hibernate 4 学习笔记 **概述:** Hibernate 4 是一个流行的Java对象关系映射(ORM)框架,它允许开发人员在Java应用中处理数据库操作,而无需直接编写SQL语句。这个学习笔记将深入探讨Hibernate 4的核心...

    hibernate API帮助文档 及hibernate学习笔记

    这篇文档和学习笔记将深入介绍Hibernate的核心概念、API用法以及最佳实践。 1. **Hibernate核心概念** - **对象关系映射(ORM)**: Hibernate是ORM的一种实现,它允许开发者使用面向对象的方式来操作数据库,而...

    Hibernate3.3_学习笔记.doc.zip

    《Hibernate3.3_学习笔记》是一份详细记录了Hibernate3.3版本特性和使用方法的文档,旨在帮助开发者深入理解和应用这一强大的对象关系映射(ORM)框架。Hibernate是Java开发中的一个明星库,它简化了数据库操作,...

    hibernate学习笔记第二天的源码

    在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...

    Hibernate学习笔记(培训学习时的笔记)

    【Hibernate学习笔记】 Hibernate是一个强大的Java对象关系映射(ORM)框架,它简化了数据库与Java应用程序之间的交互。本笔记将深入探讨Hibernate的核心概念、配置、实体管理、查询语言以及事务处理等方面,帮助...

    hibernate学习笔记(全)

    【hibernate学习笔记(全)】是一份全面介绍Hibernate框架的资料,涵盖了从基础到高级的诸多知识点。Hibernate作为Java领域中一个流行的持久化框架,它极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而...

    Hibernate学习笔记!

    **Hibernate学习笔记** Hibernate是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。本笔记将深入探讨Hibernate的核心概念、配置、实体管理、查询语言以及最佳实践...

    [Java学习笔记doc]Hibernate学习教程和笔记

    【Java学习笔记doc】Hibernate学习教程和笔记 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java开发者与数据库之间的交互。这个文档集合是针对Java初学者和进阶者的一份宝贵资料,旨在深入理解...

    Spring学习笔记(内含代码)

    这个“Spring学习笔记(内含代码)”包含了作者在深入研究Spring框架过程中所做的详细记录,旨在帮助初学者和有经验的开发者更好地理解和应用Spring。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI...

    ( Hibernate 学习笔记.rar )面试资料

    【Hibernate 学习笔记】是针对Java开发人员的一份面试准备资料,主要涵盖了J2EE企业级应用开发中的重要框架Hibernate。Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互,...

    hibernate 个人学习笔记及代码

    通过深入学习和实践这个“hibernate 个人学习笔记及代码”包,初学者可以掌握Hibernate的基础知识和实战技能,为Java开发中的数据库操作打下坚实基础。在学习过程中,建议结合实际项目进行练习,以便更好地理解和...

    hibernate学习笔记,学习大纲【吐血推荐】

    **Hibernate学习笔记与大纲** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本笔记将深入...

    Hibernate学习笔记(三)

    在本篇“Hibernate学习笔记(三)”中,我们将深入探讨Hibernate这一强大的Java持久化框架。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用面向对象的方式处理数据库操作,极大地简化了Java应用程序与...

    Hibernate学习笔记

    《Hibernate学习笔记》是一份深度剖析Hibernate框架的教程,旨在为初学者提供全面而深入的指导,帮助他们快速掌握这个强大的Java对象关系映射(ORM)工具。Hibernate作为Java领域中广泛使用的ORM解决方案,它极大地...

Global site tag (gtag.js) - Google Analytics