做过的项目中Hibernate都是直接采用ehcache做为缓存,ehcache是一个好东西,采用内 存+文件系统结合可以胜任大多数情况,而且Hibernate和ehcache简直就是天造地设的一对,配合非常之默契。
但是在集群环境下缓存不同步的问题日益凸显,尽管最新版本的ehcache已经支持通过multicast来实现不同进程的缓存数据同步的功能,这样的结 构在集群的节点很多的时候性能下降得厉害,而且也不清楚其稳定性如何,因此ehcache暂且搁下。
对memcached早有耳闻,它是一种采用客户端服务器工作模式的集中式缓存系统,在很多非常大的网站中被采用。之前试过Java版的客户端API,发 现问题多多容易出错,由于同步的问题导致性能也超级差。最近Java的客户端API发布了新的版本,再次试用已不可同日而语,于是开始在项目中编写 Memcached的CacheProvider供Hibernate使用,使用过程中碰到一些问题,现在把这些问题的中心思想写出来,希望对大家有所帮 助。
首先ehcache和memcached的结构是完全不相同的。一个ehcache缓存系统可以同时定义多个cache,每个cache使用key- value方式存储数据,而memcahced只有key-value,它是一个大的哈希表。因此当我们在Hibernate配置了多个缓存的时候在 memcached就会出现问题,这些问题具体表现出来的异常是ClassCastException,因为不同的对象使用同一个key 进行缓存数据的读写。这在ehcache中是没有问题的,因为这就是ehcache的结构。由此,为了让Hibernate使用 memcached缓存系统,我们需要在Provider这个级别上对缓存的key进行包装,我们可以将Hibernate传递过来的缓存名跟key结合 起来生成一个新的key,读写缓存数据都是用这个key,这样就不会发生缓存数据冲突导致的异常。
还有另外一个问题是关于查询的缓存,当我们执行一个稍微复杂点的HQL语句并对这个语句的执行禁果进行缓存的时候可能会出错,这些错误的原因就是key的 内容包含某些memcached通讯协议上定义的字符导致memcached在解析协议的时候出现异常,因此还是使用前面提到的方法,对key进行二次包 装。做法不外乎两种:直接将key转成hashcode然后把hashcode做为新的key;如果担心生成的hashcode可能会重复(事实上这个可 能性微乎其微),那还可以用MD5算法生成新的字符串来做为key,这样就不用担心我们的key存在一些memcached保留的字符而导致错误。
经过如此改造后,直接将DLOG4J改为memcached做为缓存系统,到目前未知还没发现什么问题,运行非常良好。
本文所用到的代码已经编译完毕并打包,下载地址如下:
/uploads/files/memcached_provider_0_1.jar
分享到:
相关推荐
memcached-2.5-sources.jar、hibernate-memcached-1.2.2-sources.jar、spy-2.4.jar这三个jar不太好找,剩下两个commons-codec和slf4j-log4j直接maven配置一下就行 <groupId>org.slf4j <artifactId>slf4j-log4j12 ...
hibernate-memcached,一个分布式缓存框架,很强大,这里提供hibernate集成jar
在项目中集成Hibernate和Memcached,我们需要以下几个步骤: 1. **添加依赖**:在项目的构建配置(如Maven或Gradle)中,添加Hibernate-Memcached的相关依赖库,确保项目可以正确引用。 2. **配置Hibernate**:在...
本篇文档将详细介绍Hibernate与Memcached集成的相关知识。 1. Hibernate Memcached简介: Hibernate Memcached是将Memcached作为二级缓存机制引入到Hibernate中的一个插件,它允许开发者将频繁访问的数据存储在...
标题中的“memcache也spring,hibernate的配置”指的是如何在Java开发环境中,结合Memcached缓存系统、Spring框架和Hibernate持久化框架进行集成配置。Memcached是一种高性能的分布式内存对象缓存系统,用于加速动态...
【标题】"hibernate4+spring4+memcached 工程"是一个集成项目,它结合了三个关键的开源...通过深入研究和理解这个工程,开发者不仅可以掌握这三个组件的基本用法,还能了解到如何在实际项目中有效地集成和优化它们。
总之,将Memcached集成到Hibernate作为二级缓存,能够显著提升系统性能,但同时也需要合理配置和管理,以确保系统的可靠性和数据的一致性。通过上述jar包,开发者可以轻松地将这两者结合,为Java应用带来更高的效率...
Memcached和Hibernate是两种在IT领域中广泛应用的技术。Memcached是一种高性能的分布式内存对象缓存系统,用于减轻数据库负载,提高应用程序的响应速度。而Hibernate则是一个Java持久化框架,它简化了数据库与Java...
Hibernate4集成memcache用jar合集 hibernate配置 <property name="hibernate.cache.region.factory_class">com.googlecode.hibernate.memcached.MemcachedRegionFactory</property>
在构建Web应用程序时,"Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】"是一个常见的技术栈,它涵盖了多个关键组件,为高效、灵活的开发提供了坚实的基础。以下是这个技术组合中...
总结,memcached-2.1.jar是Java开发人员在项目中实现Memcached缓存功能的重要工具,通过这个库,可以轻松地与Memcached服务器进行交互,提升Web应用的性能和用户体验。在使用过程中,需要注意合理配置、选择合适的...
5. **Hibernate4与memcached集成**:使用特定的Hibernate缓存插件(如hibernate-ehcache或spymemcached),可以将memcached作为二级缓存,提高数据读取速度。 6. **jar包的使用**:将hibernate4集成memcached所需的...
标题“memcached在SSH中的配置”指的是如何在SSH(Spring Security、Struts2和Hibernate)这个Java Web开发框架组合中集成和配置缓存系统memcached。memcached是一个高性能、分布式内存对象缓存系统,常用于加速动态...
它还提供了丰富的特性,如支持完整的协议、客户端分布、节点权重设置、动态增删节点、JMX支持、Spring和Hibernate-memcached集成、连接池功能以及良好的可扩展性。 **推荐与建议** 考虑到官方客户端的新版本在性能...
3. **Hibernate与memcached集成**:将memcached作为Hibernate二级缓存的提供者,需要配置相应的插件或库,如hibernate-ehcache或hibernate-memcached。集成过程通常包括配置Hibernate的配置文件(hibernate.cfg.xml...
在IT领域,尤其是在Web开发中,Java、MySQL和Memcached是三个非常重要的技术组件。本文将深入探讨这些技术,以及如何...然而,为了实现这样的系统,开发者需要对每个组件有深入的理解,并且能够熟练地进行集成和优化。
4. **使用hibernate-memcached**:从提供的压缩包文件名来看,`hibernate-memcached.jar`和`hibernate-memcached-source.jar`可能是用于在Java应用中集成Memcached的库。这个库可以帮助我们将Hibernate的对象缓存到...
4. 分布式缓存:使用第三方缓存服务(如 Memcached 或 Redis)与 NHibernate 集成以提高应用性能。 5. 扩展 NHibernate:如何自定义拦截器、事件监听器,以及实现自己的持久化策略。 总之,这个压缩包提供的资源...