当前位置: 首页 > 编程笔记 >

JSP 开发之hibernate配置二级缓存的方法

满伟彦
2023-03-14
本文向大家介绍JSP 开发之hibernate配置二级缓存的方法,包括了JSP 开发之hibernate配置二级缓存的方法的使用技巧和注意事项,需要的朋友参考一下

JSP 开发之hibernate配置二级缓存的方法

hibernate二级缓存也称为进程级的缓存或SessionFactory级的缓存。

二级缓存是全局缓存,它可以被所有的session共享。

二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。

常用的缓存插件 Hibernater二级缓存是一个插件,下面是几种常用的缓存插件:

  • EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。
  • OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。
  • SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。
  • JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。

如何在程序里使用二级缓存:

首先在hibernate.cfg.xml开启二级缓存


<hibernate-configuration> 
  <session-factory> 

   ...... 

   <!-- 开启二级缓存 --> 
   <property name="hibernate.cache.use_second_level_cache">true</property> 
   <!-- 启动"查询缓存"如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集,必须配置此项--> 
   <property name="hibernate.cache.use_query_cache">true</property> 
   <!-- 设置二级缓存插件EHCache的Provider类--> 
   <!-- <property name="hibernate.cache.provider_class"> 
     org.hibernate.cache.EhCacheProvider 
   </property> --> 
   <!-- 二级缓存区域名的前缀 --> 
   <!--<property name="hibernate.cache.region_prefix">test</property>--> 
   <!-- 高速缓存提供程序 --> 
   <property name="hibernate.cache.region.factory_class"> 
     net.sf.ehcache.hibernate.EhCacheRegionFactory 
   </property> 
   <!-- Hibernate4以后都封装到org.hibernate.cache.ehcache.EhCacheRegionFactory --> 
   <!-- 指定缓存配置文件位置 --> 
   <!-- <property name="hibernate.cache.provider_configuration_file_resource_path"> 
     ehcache.xml 
   </property> --> 
   <!-- 强制Hibernate以更人性化的格式将数据存入二级缓存 --> 
   <property name="hibernate.cache.use_structured_entries">true</property> 

   <!-- Hibernate将收集有助于性能调节的统计数据 --> 
   <property name="hibernate.generate_statistics">true</property> 

   ...... 

  </session-factory> 
</hibernate-configuration> 

然后是ehcache配置(ehcache.xml)

cache参数详解:

● name:指定区域名
● maxElementsInMemory :缓存在内存中的最大数目
● maxElementsOnDisk:缓存在磁盘上的最大数目
● eternal :设置是否永远不过期
● overflowToDisk : 硬盘溢出数目
● timeToIdleSeconds :对象处于空闲状态的最多秒数后销毁
● timeToLiveSeconds :对象处于缓存状态的最多秒数后销毁
● memoryStoreEvictionPolicy:缓存算法,有LRU(默认)、LFU、LFU

关于缓存算法,常见有三种:

● LRU:(Least Rencently Used)新来的对象替换掉使用时间算最近很少使用的对象
● LFU:(Least Frequently Used)替换掉按命中率高低算比较低的对象
● LFU:(First In First Out)把最早进入二级缓存的对象替换掉

Xml代码

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache> 
 <!--如果缓存中的对象存储超过指定的缓存数量的对象存储的磁盘地址--> 
 <diskStore path="D:/ehcache"/> 

 <!-- 默认cache:如果没有对应的特定区域的缓存,就使用默认缓存 --> 
 <defaultCache maxElementsInMemory="10000" 
        eternal="false" 
        timeToIdleSeconds="300"  
        timeToLiveSeconds="600" 
        overflowToDisk="false"/> 
 <!-- 指定区域cache:通过name指定,name对应到Hibernate中的区域名即可--> 
 <cache name="cn.javass.h3test.model.UserModel" 
        eternal="false" 
        maxElementsInMemory="100" 
        timeToIdleSeconds="1200" 
        timeToLiveSeconds="1200" 
        overflowToDisk="false"> 
 </cache> 
 </ehcache> 

在每个实体的hbm文件中配置cache元素,usage可以是read-only或者是read-write等4种。

Xml代码

<class> 
<!-- 设置该持久化类的二级缓存并发访问策略 read-only read-write nonstrict-read-write transactional--> 
    <class name="cn.java.test.model.User" table="TBL_USER"> 
       <cache usage="read-write"/> 
    ......  
  </class> 
</hibernate-mapping> 

**也可以用Hibernate注解配置缓存实体类** 

**Java代码 
@Entity  
@Table  
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
public class User implements Serializable {  
  private static final long serialVersionUID = -5121812640999313420L; 
  private Integer id; 
  private String name; 

  ...... 
}**

以上就是hibernate 二级缓存的两种实现方法,本站关于JSP hibernate开发的文章还有很多,希望大家多多搜出查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 问题内容: 我想在hibernate项目中使用二级缓存,但是我只对hibernate二级缓存了解一点,任何人都可以解释我应该如何在代码中使用它以及需要什么配置和.jar文件吗?我将这些设置设置为我的hibernate.cfg.xml文件 并添加这些jar文件, 我想知道我是否需要更改其他配置? 我怎么知道我的项目使用二级缓存? 如果只是设置此设置,hibernate将自动使用此设置,否则我必须在我

  • 本文向大家介绍Hibernate中一级缓存和二级缓存之间的区别,包括了Hibernate中一级缓存和二级缓存之间的区别的使用技巧和注意事项,需要的朋友参考一下 Hibernate支持两种类型的缓存,一种是第一级缓存,另一种是第二级缓存。  一级缓存是会话级缓存,它始终与会话级对象关联。这种类型的缓存用于通过缓存对象的状态来最小化Db交互。 那不是在事务中完成每次修改之后更新,而是仅在事务结束时更新

  • 本文向大家介绍详解Mybatis的二级缓存配置,包括了详解Mybatis的二级缓存配置的使用技巧和注意事项,需要的朋友参考一下 一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要 每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的。 Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的Mapper 映射文件中添加一行: <cache /> 它将采用默认的行

  • 问题内容: 我正在开发hibernate+ ehcache程序。 ehcache.xml 我在bean.xml中提到了ehcache 我在dao类中的调用方法是 输出为: 但是它在数据库中命中了两次。我在代码中没有发现任何错误。请向我建议为什么它在数据库中命中了两次。 问题答案: 我已经解决了我的问题。我需要添加 在域类中。

  • 我正在使用Bigmemory Max 4.0.5,因为terracotta为我的应用程序分配缓存作为hibernate二级缓存,但是我在服务器启动时遇到了以下异常。 原因:com.tc.config.schema.setup.ConfigurationSetupException: 来自 'localhost:9510' 服务器的基本配置中的配置数据不符合 Terracotta 架构: [0]:

  • 尝试使用infinispan作为Hibernate的二级缓存,但总是给我以下错误 org.infinispan.jmx.JMX MBean实例类型=CacheManager, name="DefaultCacheManager"已经在'org.infinispan'JMX域下注册。如果您想允许多个配置了相同JMX域的实例,请在org.infinispan.jmx.JmxUtil.buildJmxD

  • 我很想知道Hibernate二级缓存是否可以在运行在两个不同JVM上的两个不同Hibernate会话之间共享。 我正在使用Hibernate 3.1和Ehcache来提供二级缓存,并且在Ehcache中。xml配置文件我们可以指定在磁盘上创建缓存的位置 因此,如果我现在在不同的JVM中打开两个不同的Hibernate会话,它们都指向同一个JVM,那么这将允许我在两个JVM之间共享二级缓存。 如果是

  • 当你使用本地(在内存中)缓存时,服务器可以缓存一些信息并快速地检索它,但是其他服务器不能访问这个缓存数据,他们需要到数据库中查询同样的信息。 如果你喜欢使用分布式缓存让其他服务器访问缓存的数据,由于它有一些序列化/反序列化和网络延迟开销,则需要注意:在某些情况下,它可能会降低性能。 缓存需要处理的另一个问题:缓存失效。 There are only two hard things in Compu