EHCache 学习笔记

转载 2015年07月09日 22:51:57

EHCache 学习笔记


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会自动同步集群中服务器的缓存,当一台服务器挂掉后,另外的服务器可以马上接上来,防止用户状态数据丢失,所以,对安全性的保障是十分有效的。 

Mybatis学习笔记(十七)【mybatis整合ehcache】

Contents 分布缓存 整合方法(掌握) 整合ehcache 加入ehcache的配置文件 ehcache是一个分布式缓存框架 分布缓存 我们系统为了提高系统并发,性能、一般对系...
  • WuLex
  • WuLex
  • 2017年11月12日 18:59
  • 45

Hibernate学习笔记之EHCache的配置

Hibernate默认二级缓存是不启动的,启动二级缓存(以EHCache为例)需要以下步骤: 1、添加相关的包: Ehcache.jar和commons-logging.jar,如果hiberna...

EhCache缓存框架学习笔记

EhCache缓存框架简介EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider我们使用EhCache缓存框架主要是为了判断重复...

Hibernate学习笔记之EHCache的配置

Hibernate默认二级缓存是不启动的,启动二级缓存(以EHCache为例)需要以下步骤: 1、添加相关的包: Ehcache.jar和commons-logging.jar,如果hib...

EHCache 学习笔记

EHCache 学习笔记 EHCache 是一个纯java的,在Hibernate2.1充当可插入的在进程中的缓存。 它具有以下特点:最小的依赖性,全面的文特性:快速,简单,丰富的文档和测试...

Spring学习笔记(二十四):Spring中使用缓存ehcache

配置文件:spring-context.xml中配置缓存bean

Hibernate学习笔记之EHCache的配置

Hibernate默认二级缓存是不启动的,启动二级缓存(以EHCache为例)需要以下步骤:1、添加相关的包。2、配置hibernate.cfg.xml文件。3、添加配置文件--ehcache.xml...

JSP学习笔记(七十六):使用EHCache

一、获取EHCache 下载地址:http://ehcache.sourceforge.net/ 二、使用EHCache 添加对应的jar包到classpath中:我使用的是1.5,需要添加eh...

TypeScript简单学习笔记

  • 2017年12月15日 09:05
  • 158KB
  • 下载

Go语言学习笔记

  • 2017年12月13日 22:26
  • 1.78MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EHCache 学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)