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。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sghys/archive/2008/02/13/2090833.aspx
分享到:
相关推荐
JCS缓存所需jar
JCS超越了简单地在内存中缓存对象的功能。它提供了许多附加的功能: ● 内存管理 ● 磁盘溢位(和碎片整理) ● 线程池控制 ● 元素分组 ● 最少的依赖 ● 快速嵌套的直接了当的删除 ...
JCS超越了简单地在内存中缓存对象的功能。它提供了许多附加的功能: ● 内存管理 ● 磁盘溢位(和碎片整理) ● 线程池控制 ● 元素分组 ● 最少的依赖 ● 快速嵌套的直接了当的删除 ...
JCS缓存入门及简介
jcs缓存所需要的包。导入这两个包即可使用jcs缓存策略
jcs-1.3资源包下载,没什么可描述的, 自己下载看吧
jcs 所需的三个jar包 还没来得及测试
简单的jcs实例,需要一些jar包,对于占用大量内存的代码可以考虑用jcs.
JCS在一般用在,查询数据库比较频繁,每次查询的结果都差不多,这样讲数据进行缓冲,可以 减轻数据库负担: 下面举个例子: 在一个点击量比较频繁的页面,调用一个数据列表,每个用户进去在某一时间段数据都一样,...
佳灵JCS高压变频器彩色样本PDF版pdf,佳灵JCS高压变频器彩色样本PDF版
昆仑海岸 JCS大量程系列超声波物位变送器使用说明书PDF,昆仑海岸 JCS大量程系列超声波物位变送器使用说明书
commons-jcs针对web开发缓存处理
资源分类:Python库 所属语言:Python 资源全名:jcson-0.1.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
JCS-018立时加工中心主轴箱及(sw+说明书+cad).rar
今天看到csdn 上的一个哥们,将这个资源的资源分设为10,从另外的地方找了一份,特上传与大家分享。
What jars are required by JCS? As of verison 1.2.7.0, the core of JCS (the LRU memory cache, the indexed disk cache, the TCP lateral, and the RMI remote server) requires only two other jars. ...
JCS-018立时加工中心主轴箱及(sw+说明书+cad)cad图纸毕业生设计书.zip
(Java Caching System)基于数据库的WEB应用程序加上缓存,以提高性能
NULL 博文链接:https://phl.iteye.com/blog/2240901
昆仑海岸 JCS-10系列超声波物位变送器使用说明书PDF,昆仑海岸 JCS-10系列超声波物位变送器使用说明书