`
shazhifeng
  • 浏览: 125213 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate的缓存

阅读更多

Hibernate的缓存主要实现在net.sf.hibernate.cache包里。具体代码请查看Hibernate 源码。

1、Cache
此接口定义了缓存的一些基本操作,例如get,put,lock,unlock等。在此接口的基础上,Hibernate使用JCS等多种机制实现了缓存,包括:JCSCache,OSCache,SwarmCache,TreeCache,HashtableCache。由于整个缓存系统基本就是策略模式,所以,后面将只以JCSCache作为例子,其他的可以举一反三。

2、CacheProvider
此接口提供了配置Cache的方法:buildCache,还提供了取时间戳的方法:nextTimestamp。这里也用到了策略模式,拿buildCache来说,JCSCacheProvider和OSCacheProvider的实现方法就不一样,JCSCacheProvider只是简单的生成一个JCSCache的实例,而OSCacheProvider还进行了一些其他的处理。再来看看nextTimestamp,JCSCacheProvider直接调用时间戳类(Timestamper)来生成时间戳,这样使时间戳而SwarmCacheProvider却没有,它直接返回了一个值,精确度没有JCSCacheProvider高,但是速度却很快。

3、Timestamper
此类提供了生成时间戳的方法,它的next方法返回一个递增的时间戳,方法的实现使用了以为的办法,可以保证产生的时间戳在1/4000 ms内无重复。

4、CacheConcurrencyStrategy
此接口定义了对Cache进行操作的策略(其实这个不算是个策略模式,应该算代理模式),例如,ReadWriteCache,ReadOnlyCache等。对于这个是代理模式还是策略模式,从工厂类CacheFactory就可以看出来——createCache方法,它的返回值不是Cache类型,而是CacheConcurrencyStrategy类型。但是这里的代理模式又与标准的GoF的又有一点区别:如果按标准的代理模式,CacheConcurrencyStrategy应该继承Cache才对,但是这里对这两个接口是单独处理的。

5、二级锁
CacheConcurrencyStrategy接口里定义了一个空接口:SoftLock。这个接口没有任何的方法,它的功能是为实现二级锁留下空间。像JCS这样的缓存系统都提供了lock和unlock,可以实现对象的加锁与解锁操作。但是,有时候只是实现简单的lock操作是不够的,还需要加上某些条件,比如加上时间戳的判别等。
首先,我们来看看不要二级锁的情况,拿NonstrictReadWriteCache类来说,它实现了CacheConcurrencyStrategy接口,它的策略是不使用锁。所以,它里面的lock方法其实什么也没有做,仅仅只有"return null;"。

其次,我们再来看看ReadWriteCache类。这个类实现的策略是既使用Cache提供的锁,也使用自己的二级锁,以便对时间戳进行判定。因此,为了实现这个策略,类中还定义了以下几个接口和类:
public static interface Lockable {...}
public static final class Item implements Serializable, Lockable {...}
public static final class Lock implements Serializable, Lockable, SoftLock {...}
这几个类和接口是实现二级锁的核心:
Lockable接口也是一个策略——表示对于被加锁的对象,应该以什么方式来进行读写;
Item类实现了Lockable,它把缓存中存储的对象和该对象的时间戳封装在一起,同时实现了对象的只读锁。具体可以看它实现的Lockable接口的那三个方法

  public boolean isLock() {
   
// 标志符,false表示这不是一个锁,而是一个数据对象
   
// (数据对象是指缓存中的实体对象,而非锁对象)
   return false
  }

  
/**//**
   * Is this item visible to the timestamped
   * transaction?
   
*/

  
public boolean isGettable(long txTimestamp) {
   
// 这里体现出了策略所在,即对象与时间戳是相关的。
   return freshTimestamp < txTimestamp;
  }


  
/**//**
   * Don't overwite already cached items
   
*/

  
public boolean isPuttable(long txTimestamp) {
   
// we really could refresh the item if it  
   
// is not a lock, but it might be slower
   
//return freshTimestamp < txTimestamp
   
// 对于只读锁,写操作是不允许的。
   return false;
  }


在这里我们看到,Item对象是只允许读,而不允许写的。
Lock对象只是一个锁对象而不是一个数据对象,它的作用只是作为一个锁,对于客户端来说没有什么特别的意义。

6、UpdateTimestampsCache
此类用于对缓存时间戳的更新进行追踪。由于此类还未完成,所以暂时不管。

分享到:
评论

相关推荐

    Hibernate缓存深入详解 from ITEye

    **Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...

    Hibernate缓存.doc

    Hibernate缓存.docHibernate缓存.doc

    Java Hibernate缓存深入详解

    Java Hibernate缓存深入详解

    hibernate缓存

    ### Hibernate缓存机制及优化策略 #### 一、概述 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域被广泛应用于数据库操作。它提供了丰富的缓存机制来提高应用性能并降低数据库访问压力。本文将...

    Hibernate缓存与spring事务详解

    **标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...

    hibernate缓存深入详解.

    关于hibernate缓存的一个ppt课件,60+幻灯片,有需要的可以看一下

    Hibernate缓存深入详解

    【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...

    Hibernate缓存详解

    **Hibernate缓存详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提高数据访问性能,Hibernate引入了缓存机制,它可以减少对数据库的直接访问,从而提升应用的...

    Hibernate缓存,性能优化

    本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### Hibernate缓存原理 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动...

    hibernate缓存和事务

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许Java...通过理解Hibernate缓存和事务管理,以及如何有效地执行查询,开发者可以创建高效、健壮的Java应用程序,降低与数据库交互的复杂性,同时提升系统性能。

    Hibernate教程25_Hibernate缓存

    **标题解析:** "Hibernate教程25_Hibernate缓存" 这个标题表明了我们要讨论的是关于Hibernate框架的第25个教程,重点是它的缓存机制。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的...

    Hibernate缓存管理.doc

    【Hibernate缓存管理】是数据库持久化框架Hibernate中优化性能的关键技术。缓存的主要目的是减少对数据库的直接访问,提高应用程序的运行效率。缓存的数据是数据库中数据的副本,存在于内存或硬盘中,便于快速读取。...

    hibernate缓存ehcache用法

    这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...

    hibernate 缓存

    【Hibernate缓存详解】 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。其缓存机制是提升系统性能的关键所在。本篇将深入探讨Hibernate的缓存机制,包括一级缓存和二级...

Global site tag (gtag.js) - Google Analytics