Ehcache是Java平台常用的缓存组建,也是hibernate目前默认的二级缓存实现。使用Java构建互联网应用,缓存是不可缺少的环节,Ehcache登场率也相当高。
Grails集成了Hibernate作为ORM持久化的方案,默认也使用Ehcache作为缓存。
比起Php等技术常常使用memcached作为缓存相比,Ehcache省去了数据类型转换的复杂步骤,而且无缝集成hibernate,并且是JVM内的数据,所以对于Java应用来说更加方便快捷。
只是一旦应用需要分布式或者集群,JVM内部的缓存非但没有多大帮助反倒是成了累赘,数据同步是一个极大的障碍。所以Ehcache集群方案也十分重要。Ehcache本身有多种集群同步方案,包括RMI、JGROUPS、JMS。这几种方案在和Grails集成过程中都遇到了很大的障碍,而且国内资料讨论相对少,调试不通过故障也不清楚。另外如果集群节点很多,那么通过广播的方式同步数据,终究不是一个高效率的方案,虽然我没亲自做过测试。
Terracotta是一个极品又奇葩的软件(褒义),我看到网上使用它在不修改源码的情况下,将两个JVM中四个线程互锁数据实现的Demo,我感到十分震撼。用Terracotta实现Ehcache集群,配置相对简单,而且不容易出错。并且感觉上,效率更高,内存利用率也更高。而且作为Java的缓存集群方案,它的扩展性很强,作为一个集群缓存方案非常合适。(本段属于个人感觉,没有实验数据,仅供参考)
接下来是我在Grails中配置Terracotta实现ehcache缓存的步骤
Grails版本1.3.9
1.3.9中,Grails默认的ehcache版本是1.71。这个时候的ehcache可能还没有被Terracotta收购,和Terracotta的集成未必顺利,所以我升级到目前最新版本2.62,并且导入ehcache和Terracotta集成的工具。在BuildConfig.groovy文件中配置如下
inherits("global") {
// uncomment to disable ehcache
// excludes 'ehcache'
runtime 'net.sf.ehcache:ehcache-core:2.6.2'
runtime 'net.sf.ehcache:ehcache-terracotta:2.6.2'
runtime 'org.terracotta:terracotta-toolkit-1.2-runtime:3.1.0'
}
利用maven自动下载jar包,继续配置BuildConfig.groovy加入新资源
repositories {
grailsPlugins()
grailsHome()
grailsCentral()
mavenRepo "http://www.terracotta.org/download/reflector/releases"
}
然后在conf目录下创建ehcache.xml文件配置缓存
加入节点
<terracottaConfig url="localhost:9510" />
链接Terracotta服务器,然后只需要在需要进行集群缓存的cache中增加标签<terracotta />即可
例如查询缓存的配置:
<cache name="org.hibernate.cache.StandardQueryCache"
maxEntriesLocalHeap="10000"
timeToIdleSeconds="300"
><terracotta /></cache>
default是否可以配置<terracotta />我还不确定
然后安装terracotta。我下载了最新的Terracotta3.7.2,使用java -jar命令进行安装。linux下如何命令安装还没有尝试。安装完成后启动start-tc-server.bat|sh服务,默认端口即是9510
然后启动Grails程序即可链接到Terracotta,即可成功连接缓存。
Terracotta对于配置的cache,集群环境中如果配置文件不一致,目前我观察只以其中一个有效,感觉还做不到各有各的效果。我感觉是最其中配置最大的生效,例如时间或者数量的上限。也可能是第一个链接服务器的生效。具体的没有详细测试,有待继续研究。
分享到:
相关推荐
默认情况下,Hibernate提供了第一级缓存——Session缓存,但对于更复杂的缓存需求,如跨Session的共享缓存,Ehcache则作为第二级缓存被引入。第二级缓存可以存储更多数据,减少对数据库的依赖,提高并发性能。 **...
ehcache3集群相关资源,包括ehcache-clustered-3.10.0-kit、ehcache-3.10.0.jar、ehcache-clustered-3.10.0.jar、terracotta-3.7.7.tar.gz、ehcache-transactions-3.10.0.jar
1. **分布式缓存**:在集群环境中,EHcache支持分布式缓存,意味着多个节点可以共享同一份缓存数据,提高可用性和数据一致性。 2. **Replication(复制)**:当一个节点中的缓存项更新时,该更新会自动复制到其他...
**Ehcache 使用详解与集群配置** ...总结,Ehcache是Java开发中常用的缓存解决方案,其强大的集群功能使得在分布式环境下的数据一致性得以保障。通过正确配置和使用,可以极大地提升系统的性能和可靠性。
- **分布式缓存**:在分布式环境中,通过Terracotta服务器实现Ehcache的集群,共享缓存数据。 7. **最佳实践** - **缓存设计**:根据业务需求合理设计缓存策略,避免过度缓存导致资源浪费。 - **监控和调优**:...
4. **Terracotta Server Array**:Ehcache原生支持与Terracotta服务器集成,提供更高级别的集群管理和服务。Terracotta Server Array可以监控和管理Ehcache集群,提供自动故障检测和恢复功能。 5. **缓存更新策略**...
EhCache是由Terracotta公司开发的内存缓存系统,它支持本地缓存和分布式缓存两种模式。EhCache的特点包括:快速存取、内存管理、支持持久化和缓存过期策略等。在集群环境中,EhCache通过RMI(远程方法调用)或...
在分布式环境中,Ehcache使用Terracotta服务器进行集群管理,确保缓存的一致性和高可用性。 Terracotta服务器通过TCP/IP协议协调各个节点,确保数据同步,并提供故障转移功能,当某个节点出现问题时,其他节点可以...
7. **测试与监控**:部署并启动Ehcache集群后,可以使用Ehcache管理工具或Terracotta的管理控制台来监控集群的状态,包括节点健康、缓存统计和事件日志。 8. **性能优化**:在集群环境中,考虑缓存数据的分布策略,...
Ehcache 集群通过使用 Terracotta 服务器作为集群管理器,实现了跨节点的数据同步。当一个节点上的缓存数据发生变化时,这些更改会立即传播到其他节点,确保了数据的一致性。这种模式特别适合于高并发、大数据量的...
在集群环境下,Ehcache 3 使用 Terracotta Server Array (TSA) 进行集群协调和数据同步。TSA 是一个专门用于Ehcache集群的服务器,它提供了分布式锁服务、数据复制和故障检测等功能。当一个节点更新缓存时,TSA会...
通过Terracotta服务器,EhCache可以实现分布式缓存,让多台机器共享同一个缓存,提高系统的可扩展性。 8. **EhCache的磁盘持久化** 当内存中的缓存数据达到上限或为了防止数据丢失,EhCache支持将数据持久化到...
- `<terracotta>`元素(可选):如果需要集群支持,可以配置Ehcache与Terracotta服务器通信。 3. 使用Ehcache: - 引入依赖:在项目中添加Ehcache的JAR包,如`ehcache.jar`。 - 创建缓存管理器:使用`...
12. **缓存的缓存** - Ehcache自身的缓存机制,如二级缓存和 terracotta集群支持。 13. **最佳实践** - 实战经验分享,包括何时适合使用缓存,如何避免缓存穿透和缓存雪崩等问题。 综上所述,"ehcache缓存页面.doc...
3. **分布式缓存**:Ehcache支持分布式部署,通过 Terracotta Server 集群,可以在多台服务器间共享和同步缓存,提供高可用性和负载均衡。 4. **缓存策略**:除了LRU和LFU,Ehcache还提供了TTL(Time To Live)和...
1. **Terracotta服务器**: Ehcache通过集成Terracotta服务器,可以实现跨JVM的分布式缓存,提高多节点间的缓存共享和一致性。 2. **复制策略**: 分布式缓存中,当在一个节点上添加、更新或移除元素时,这些操作可以...
- 考虑使用 Terracotta 实现分布式缓存,以提高多服务器环境下的性能。 - 适当调整缓存大小和过期时间,平衡缓存命中率和数据新鲜度。 总结,Ehcache二级缓存的配置涉及到多个方面,包括缓存管理、内存和磁盘存储、...
在多节点环境下,可以使用EhCache的分布式缓存功能,通过RMI、JGroups或Terracotta等方式实现数据同步。配置分布式缓存需要在`ehcache.xml`中指定相关的网络配置。 **7. 性能优化与监控** EhCache提供了丰富的统计...
6. **分布式缓存**:Ehcache可以通过Terracotta服务器实现分布式缓存,允许多个节点共享同一份缓存,提高可扩展性和容错性。 7. **缓存监听器**:可以注册缓存事件监听器,如在缓存项添加、更新或删除时触发特定...
当与Terracotta结合使用时,Ehcache可以实现分布式缓存,使得多台服务器上的应用可以共享同一份缓存数据,从而构建高可用的集群环境。在本篇中,我们将深入探讨如何在Java项目中配置Ehcache与Terracotta来实现这一...