我正在使用hibernate的spring项目,并希望使用ehcache实现二级缓存。我看到了许多解决方法:
spring-modules-cache
引入了@Cacheable
注释
ehcache-spring-annotations
一个旨在成为继任者的工具集spring-modules-cache
。
Hibernate cache
可以很好地集成到hibernate自身中,以使用例如@Cache
注释进行缓存。
Programmatic cache
使用代理。基于注释的配置很快变得有限或复杂(例如,注释嵌套的多个级别)
就我个人而言,我认为spring-modules-cache
还不够彻底,因此我可能宁愿考虑使用更积极的html" target="_blank">方法ehcache-spring- annotations
。Hibernate cache
尽管这似乎是最完整的实现(例如,读取和写入缓存等)。
是什么促使使用哪个工具集?请分享您的缓存经验…
我们的项目用途选项3.我们应用注释org.hibernate.annotations.Cache
的实体,我们缓存在了Ehcache,配置了Ehcache使用ehcache.xml
,并启用和配置Hibernate的二级缓存在hibernate.cfg.xml
:
<!-- Enable the second-level cache -->
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</property>
<property name="hibernate.cache.region.factory_class">
net.sf.ehcache.hibernate.EhCacheRegionFactory
</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_structured_entries">true</property>
<property name="hibernate.cache.generate_statistics">true</property>
对于大多数实体,我们使用缓存并发策略CacheConcurrencyStrategy.TRANSACTIONAL
:
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
我们的Maven项目使用Hibernate 3.3.2GA和Ehcache 2.2.0:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.3.2.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>3.3.0.ga</version>
<exclusions>
<exclusion>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.2.1.ga</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>ejb3-persistence</artifactId>
<version>3.3.2.Beta1</version>
</dependency>
问题内容: 我想用Java中的ehcache做一些我认为应该非常简单的事情,但是我花了很多时间使自己的文档感到沮丧… 将值写入磁盘持久性缓存。关掉。 重新启动并读取该值。 这是我的Java函数: 这是我的缓存配置(ehcache.xml): 即使我在第一次运行后在磁盘上看到test.index和test.data文件,此函数的输出始终是以下内容(它似乎从未从磁盘加载缓存): 找不到缓存。正在创建缓
问题内容: 我正在使用hibernate处理spring项目,并希望使用ehcache实现二级缓存。我看到了许多解决方法: 引入注释 一个旨在成为继任者的工具集。 可以很好地集成到休眠本身中,以使用例如注释进行缓存。 使用代理。基于注释的配置迅速变得有限或复杂(例如,注释嵌套的多个级别) 就我个人而言,我认为还不够彻底,因此我可能更愿意考虑发展得更为积极。尽管这似乎是最完整的实现(例如,读取和写入
问题内容: 我正在生产中运行大型VM,并且想在运行时了解有关我的缓存大小的更多信息。我的缓存都是基于ehache 在运行时查看单个缓存大小的最佳方法是什么。使用JMX或API 是否可以通过对CacheManager的纯Java调用来配置任何选项,或者(暂时忽略JMX)必须以大字符串构建XML配置? 问题答案: 是的,使用Ehcache,您可以配置缓存并仅通过Java代码(没有XML配置)来检索其大
问题内容: 在Spring 4或Spring Boot中,有没有办法在没有xml的情况下初始化EhCache? 我注意到Spring Boot 1.0.0.RC3没有任何ehcache依赖项,但是Spring 4.0GA发行版中 提到它改进了对EhCache的支持。而且,Spring 3拥有类,但是它不再是依赖项的一部分。 编辑: Spring 4确实具有EhCache支持。您必须添加依赖项: E
问题内容: 我在具有数据库后端和基于EHCache的缓存的Spring多线程Web服务上遇到缓存问题。该服务有许多客户端一次又一次地请求同一个对象,每秒有数十个请求。仅频繁请求几个对象,而不经常请求大量其他对象。对象可以每隔几分钟更改一次,因此将缓存的TTL设置为一分钟。从数据库加载对象很慢,并且至少需要几秒钟。 首先,我使用了一个简单的实现来获取对象: 检查对象是否在缓存中。 如果是,请从缓存中
问题内容: 我需要做出的决定之一是在系统中使用哪种缓存框架。有这么多选择,我目前正在研究redis,ehcache和memcached。 谁能指出这三个特定框架的性能基准?还概述了它们的功能-我对缺点特别感兴趣,即。在一种情况下您会使用另一种情况。 问题答案: 这里有一个小的功能比较:http : //toddrobinson.com/appfabric/appfabric-cache-featu