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

hibernate中jcs详解

    博客分类:
  • Java
阅读更多
JCS是一个对象Cache,它可以把Java对象缓存起来,提高那些访问频率很高的Java对象的存取效率。

如果要对一个持久对象做缓冲,就是在hbm的class标签前面加一行:

<jcs-cache usage="read-only"/>

<jcs-cache usage="read-write"/>

这是一个只读缓冲,只对Read操作做缓冲,也可以用read-write,对update也进行缓冲,不过不能用在集群环境中。

例如:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
<class name="com.fankai.Cat" table="cat">
<jcs-cache usage="read-only"/>
<id name="id" unsaved-value="null">
<generator class="uuid.hex"/>
</id>
<property name="name" length="16" not-null="true"/>
<property name="sex" length="1" not-null="true"/>
<property name="weight" />
</class>
</hibernate-mapping>

cache.ccf是JCS的配置文件,主要配置一下:
jcs.default.cacheattributes.MaxObjects=5000 (缓冲区容纳对象大小)
jcs.default.elementattributes.MaxLifeSeconds=240(最大缓冲时间)

除了对整个持久对象,也可以对对象的集合属性进行缓冲,那就是在property标签下面写就OK了。



代码:
select c from Cat as c 



代码:
select c.id, c.name  from Cat as c
这种HQL语句不构造PO,因此不会去填充JCS。

好了,现在JCS里面填好了数据,但是该怎么取呢?上面我说过是按照对象的唯一标示来存取的,而对于PO持久对象来说,唯一标示

就是主键,因此Hibernate首先必须获得主键列表,然后根据主键列表挨个判断,看这个持久对象究竟是在JCS里面还是在数据库里面

,如果在JCS里面,那么按照主键取,如果在数据库,那么发送sql取。

现在我们来分析为什么Iterator可以使用JCS,而List不能。上面说了,用JCS之前,要先获得持久对象的主键,才能去JCS里面取持

久对象,而我们怎么才能获得主键列表呢?必须去数据库中取得,这一步是没有办法缓冲的。

Hibernate Iterator的查询本身是分为两步的:

代码:
==> select id from cat
==> select * from cat where id = ?
==> select * from cat where id = ?
...
==> select * from cat where id = ?


第一步,去数据库中取主键列表,第二步,按照主键一个一个取数据。当然了,我们现在可以看出来,Iterator方式下如果不用JCS

的话,那么从数据库中取出n条记录就需要n+1次sql查询,这是非常可怕的事情,因此如果在没有使用JCS的情况下,你又必须一次去

取大量数据,应该避免使用Iterator。

而Iterator的第一次sql是取主键列表,这个时间消耗是非常少的,如果使用了JCS,那么每次查询仍然要不可避免的去发送一次sql:

select id from cat 去取主键列表,然后呢? 然后Iterator就不会那么傻了,他会先到JCS里面去看看,按照主键去找持久对象,

如果有了,直接拿出来用,如果没有,那么只好去数据库中取得,然后再把它填到JCS里面去。

因此可以看出来,JCS有点类似一个内存中的简单对象数据库, Iterator的第一次sql取主键列表是必须要到数据库里面取的,取得

了主键这把钥匙以后,Iterator会首先尝试开JCS这把锁,打得开就直接进去,如果打不开,就只好去开数据库这把锁了。

而Hibernate List方式是JDBC的简单封装,一次sql就把所有的数据都取出来了,它不会像Iterator那样先取主键,然后再取数据,

因此List无法利用JCS。不过List也可以把从数据库中取出的数据填充到JCS里面去。

最佳的方式:第一次访问使用List,快速填充JCS,以后访问采用Iterator,充分利用JCS。
分享到:
评论

相关推荐

    Hibernate中所有包作用详细讲解

    CGLIB在Hibernate中的使用非常重要,特别是在没有显式指定代理的情况下。 #### 3. dom4j.jar DOM4J是一个非常优秀的Java XML API,提供了一种简单且高效的方式来处理XML文档。Hibernate利用DOM4J解析和生成XML配置...

    jcs.rar_JCS_Java Caching System_jcs java

    JCS是用Java语言编写的,它的设计目标是减少对数据库的访问频率,通过存储经常访问的数据在内存中,从而减少网络延迟和数据库负载。在Web应用程序中,频繁的数据库交互往往是性能瓶颈,而引入缓存机制可以显著提升...

    JCS 实践

    **JCS实践详解** JCS,全称Java Caching System,是一个基于Java开发的分布式缓存系统,旨在提升应用程序的性能,特别是在高读取、低写入场景下。JCS不仅提供基本的内存缓存功能,还具备丰富的高级特性,如内存管理...

    jcs-1.3资源包

    **JCS(Java Cache System)1.3 资源包详解** JCS(Java Cache System)是一款开源的、高性能的缓存系统,主要用于提高应用程序的性能和响应速度。它通过将常用数据存储在内存中,避免了频繁的数据库访问,从而提升...

    jcs缓存处理

    **JCS(Java Caching System)详解** JCS(Java Caching System)是Apache软件基金会的一个开源项目,它提供了一种高效、灵活的缓存解决方案,特别适用于Web开发中的数据缓存需求。JCS的核心目标是提高应用程序的...

    Jcs1.3.Jar

    JCS 1.3.jar是JCS的一个特定版本,包含了该缓存系统的全部类和方法,允许开发者在他们的应用中集成和利用JCS的功能。这个版本可能包含了一些新的特性和改进,相比于之前的版本,比如性能优化、bug修复或者增加了新的...

    一个简单jcs实例,一看就会的程序

    标题中的“一个简单JCS实例,一看就会的程序”指的是提供了一个易于理解的JCS应用示例,帮助开发者快速入门。 描述中提到,这个实例适用于那些可能产生大量内存占用的代码场景。JCS通过将数据存储在内存中,可以...

    @hibernate Tag Reference

    在进行Hibernate项目的开发过程中,开发者经常会遇到对Hibernate描述符文件中各种注解(Tag)的应用需求。本文档旨在提供一个全面的@hibernate Tag参考指南,帮助开发人员更好地理解和使用这些标签。 #### 一、@...

    jcs缓存所需要的包

    在Java应用中,JCS通常用于减轻数据库负载,提升系统整体性能。 标题"jcs缓存所需要的包"表明我们需要关注的是与JCS缓存相关的Java库,特别是JAR文件。在这个场景下,提到的"jcs.jar包"是JCS的核心库,包含了实现...

    JCS1.3开源的缓存架构

    **JCS(Java Caching System)1.3 开源缓存架构详解** JCS(Java Caching System)是一个开源的、高性能的缓存框架,它主要用于提高应用的性能和响应速度,通过将常用数据存储在内存中,避免了频繁地访问数据库或...

    JCS简介

    - **内存管理**:JCS支持内存中的缓存管理,可以根据需求动态调整缓存大小。 - **磁盘溢出**:当内存不足时,JCS能够自动将部分缓存数据转移到磁盘上,以避免内存溢出问题,并且支持磁盘缓存的碎片整理,保持良好的...

    jcs 教程 缓冲

    JCS通过将常用数据存储在内存中,避免了频繁访问数据库,从而减轻了数据库的负载。在【描述】中提到的例子,如果一个高流量的网页需要展示一个对所有用户都相同的数据列表,JCS 可以将这个列表缓存起来,减少不必要...

    jcs 所需jar包 共3个

    标题中的"jcs 所需jar包 共3个"指的是Java Caching System(JCS)所需的三个核心组件。JCS是一个开源的内存缓存系统,用于提高应用程序的性能和响应速度,它通过将数据存储在内存中,避免了频繁的数据库访问。这三份...

    JCS所需的资源包 concurrent.jar

    在Java编程中,`concurrent.jar` 文件包含了大量用于并发处理的类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ExecutorService`等。这些类在多线程环境下工作,提高了程序的并行性,减少了锁竞争,从而提升...

    JCS简介及文档

    JCS缓存入门及简介

    jcs 缓存服务器

    **JCS缓存服务器详解** Java Cache System(JCS)是一种高效的、可扩展的、分布式的内存缓存系统,主要用于提高应用程序的性能和响应速度。它通过将数据存储在内存中,避免了频繁的数据库访问,从而减少了I/O操作,...

    本地缓存(一)ehcache/jcs/cache4j/jcs的性能测试与使用场景分析

    JCS可以部署在单机或分布式环境中,对于需要跨服务器共享数据的场景特别有用。 Cache4j是另一个轻量级的Java缓存库,它的设计目标是简单易用和高效。Cache4j提供了线程安全的缓存操作,支持定时刷新和过期策略,...

    JCS-018立时加工中心主轴箱及(sw+说明书+cad)cad图纸毕业生设计书.zip

    《JCS-018立式加工中心主轴箱及CAD设计详解》 在机械工程领域,加工中心是集高效、精密和自动化于一体的先进设备,主要用于复杂零件的批量生产。"JCS-018立式加工中心"是其中一种典型代表,其主轴箱作为核心部件,...

    昆仑海岸 JCS大量程系列超声波物位变送器使用说明书.PDF

    昆仑海岸 JCS大量程系列超声波物位变送器使用说明书PDF,昆仑海岸 JCS大量程系列超声波物位变送器使用说明书

    JCS-018立时加工中心主轴箱及(sw+说明书+cad).rar

    在JCS-018主轴箱的CAD图纸中,我们可以找到详尽的尺寸标注,这不仅帮助制造者高精度地加工出每一个部件,还确保了加工中心整体的组装质量与性能。 此外,压缩文件中的操作说明书是用户正确使用加工中心的必备工具。...

Global site tag (gtag.js) - Google Analytics