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 namemulticastGroupPort=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"/>
给个完整的配置:
-
<ehcachexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="ehcache.xsd">
-
<cacheManagerPeerProviderFactoryclass=
-
"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"/>
-
/>
-
-
<cachename="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会自动同步集群中服务器的缓存,当一台服务器挂掉后,另外的服务器可以马上接上来,防止用户状态数据丢失,所以,对安全性的保障是十分有效的。
分享到:
相关推荐
EHCAHCE基于JGROUP的集群配置方案,内含相关配置文件,及配置说明
此为ehcache的使用以及集群的使用,具体需要两台机子,将ehcache 的hostName替换相应的ip即可
ehcache集群同步配置实例加说明文档
Ehcache通过使用Jgroups做集群配置,更改每一个不同的jgroups.xml文件的端口号和IP,如果一台机器就使用127.0.0.1即可。配置好之后,把每台机器起来,就可以测试了。
Ehcache集群环境配置
ehcache提供三种网络连接策略来实现集群,rmi,jgroup还有jms。这里只说rmi方式。同时ehcache可以可以实现多播的方式实现集群。也可以手动指定集群主机序列实现集群,本例应用手动指定。
java ehcache terracotta 集群, 分布式缓存配置
Ehcache集群配置手册帮助你梳理Ehcache集群部署的配置
当有数据更新的时候,每个进程中的缓存都是独立维护的,如果这些进程缓存同步机制,那么就存在因缓存没有...所以,本文就来说说当使用EhCache的时候,如果来组建进程内缓存EnCache的集群以及配置配置他们的同步策略。
NULL 博文链接:https://jlwangjinshuang-163-com.iteye.com/blog/1058617
EHcache缓存框架,ehcache介绍与说明,Ehcache详细,EHcache集群环境配置
搭建ehcache集群的测试实例,包含了普通单机,集群的tcp配置方式,upd方式,20150627完成.
ehcache3-samples, 关于使用 Ehcache 3,一些示例/教程 Ehcache示例这里知识库包含有关 Ehcache 3用法的...示例'basic'演示 Ehcache 3的基本配置和用法'集群'- 演示如何在Terracotta服务器上使用分布式缓存功能'jsr107'
由于 JGroups 的包比较大,有两兆多,因此没有放到这个zip包里,请大家自行下载 JGroups 的jar包...只需要将解压后的 webapp 目录配置到tomcat下做为一个web应用即可进行测试。 测试方法详见 webapp/readme.txt 文件
详细描述EHCache的用法,和spring的集成,在分布式环境(集群)中的配置
主要讲解下encache的原理、分布式缓存集群环境配置、与在spring中的使用
0. 文档介绍 2 0.1 文档目的 2 0.2 文档范围 2 0.3 读者对象 2 0.4 参考文献 2 0.5 术语与缩写解释 2 1. 概述 3 1.1背景 3 1.2 主要特征 3 1.3环境 5 1.4下载资源 5 ...4.1 集群配置方式 19 5. 测试用例 28
智能缓存介绍基于Ehcache2和Redis的Java分布式二级缓存,除了基本操作外,还可以实现所有级别的多计算机集群的缓存监视和获取。 将独立缓存与特定结构中的Redis缓存系统同步,以实现全局缓存的统一管理。 动态地使用...
RedisUtils - 基于redis的工具类,与redis的集群配置无缝结合 db JdbcUtils - 操作jdbc的工具类 MongodbUtils - 操作mongodb的工具类 email EmailUtils - 邮件工具类,支持发送带附件的邮件 encryption ...
com.yangc.utilsjava工具类作为... 基于redis的工具类,与redis的集群配置无缝结合dbJdbcUtils - 操作jdbc的工具类MongodbUtils - 操作mongodb的工具类emailEmailUtils - 邮件工具类,支持发送带附件的邮件encryptionAe