EHCache 学习笔记

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

阅读更多
文章标签: ehcache
个人分类: ehcache
上一篇EHCache入门系列(四)–分布式缓存集群环境配置
下一篇Hibernate ManyToMany 删除两个实体的关联
想对作者说点什么? 我来说一句

ehcache结构

2011年09月22日 85KB 下载

ehcache页面缓存技术

2017年09月08日 2.05MB 下载

ehcache 专业教程

2010年04月22日 58KB 下载

Ehcache使用用例

2011年09月10日 60KB 下载

EHcache缓存框架

2011年03月22日 37KB 下载

Ehcache集群实例

2015年07月02日 25KB 下载

没有更多推荐了,返回首页

关闭
关闭