上一篇 文章 我介绍了Ehcache 如何和 Spring整合 但是由于 公司项目 是分布式 ,所以需要建立成一个集群,下面就给大家介绍一下Ehcache 集群 ,虽然百度上一大推,但是在测试的时候出现了很多问题。
百度上关于Ehcache集群 上的描述有很多 如:RMI 自动发现 和手动发现 JMS 和JGroup 模式
我就简单的说一下如何建立RMI 自动发现的方式。百度上关于自动发现的信息有很多如:心跳机制啊,成员每秒想组发送,如果没有发送就移除。还有自动发现是以广播的形式维护的等等。。
话不多少直接贴代码
这是我的Ehcache.xml的配置 就说说该配置 为什么意思
<diskStore> 为该二级缓存 存储的地方 百度上一大堆 我就不说了 但是为什么要注释掉呢,因为在测试的时候,我们测试UAT环境抱错 说找不到磁盘 我们用的是阿里云服务器 ,所以在我下来思考的时候我就吧该二级缓存的地方注释掉了,该二级缓存的地方为内存
<cacheMangerPeerProviderFactory> 为该成员工厂 class 是固定的(如果是RMI的自动发现) 为net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory ,properties :peerDiscovery=automatic 成员发现方式 为自动(automatic) multicastGroupAddress=230.0.0.1 为广播地址 该广播地址不可改变,该广播地址为D类网络地址,专门用于广播,https://www.cnblogs.com/onlywujun/p/5745195.html 该网站详细描述了 Ehcache 集群的利和弊。
multicastGroupPort=50009,广播的端口号为:50009 这个端口号应该不可改变(不确定) 我试了百度上所有的端口描述, 就该端口号可用
timeToLive=255 限制广播传输的范围 详细信息百度上一大推
<cacheManagerPeerListenerFactory> :成员发现监听 class一样如果为RMI自动发现就为net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory,properties:port=40002 因为我测试的是两台服务器上所以就写了40002
<defaultCache>默认cache 不详细讲解
<cache> 缓存的详细配置 ,我就不说了 上篇博客讲的很详细,可以看我上篇博客,就说说如何监听RMI同步缓存,就在当前的cache里配置 <cacheEventListenerFactory> class为:net.sf.ehcache.distribution.RMICacheReplicatorFactory properties 为具体缓存的操作配置 如put update remove 等等
<bootstrapCacheLoaderFactory> 用于初始化缓存,我当时想的是,项目启动的时候,二级缓存中还没有需要缓存的信息,必须执行特定的代码才缓存到内存中,那么能不能在项目启动的时候就从redis中(或者数据库中) 加载信息呢,就用到bootstrapCacheLoaderFactory class 是你定义的一个class 必须实现BootstrapCacheLoaderFactory<RMIBootstrapCacheLoader> 接口 实现他的createBootstrapCacheLoader 方法,只不过我当初,启动的时候并没有扫描到redis 注解,所以最后这个被我放弃了。
以上就是我的Ehcache.xml的配置
接下来说说我的测试类
CoralCache 是redis的注解使我们自己封装的redis
CacheManager 是Ehcache的注解
前台传入key ,根据cacheManager.getCache("")获取cache ,获取Cache后得到该cache中的元素,判断该元素是否为Null 如果Element 为null 那么从redis(数据库)中获取数据 。
以下博客详细说明了Ehcache 集群.
http://blog.sina.com.cn/s/blog_6151984a0101816j.html
网友评论