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。
转自:http://callan.iteye.com/blog/121781
分享到:
相关推荐
JCS缓存所需jar
资源分类:Python库 所属语言:Python 资源全名:jcson-0.1.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
JCS超越了简单地在内存中缓存对象的功能。它提供了许多附加的功能: ● 内存管理 ● 磁盘溢位(和碎片整理) ● 线程池控制 ● 元素分组 ● 最少的依赖 ● 快速嵌套的直接了当的删除 ...
JCS超越了简单地在内存中缓存对象的功能。它提供了许多附加的功能: ● 内存管理 ● 磁盘溢位(和碎片整理) ● 线程池控制 ● 元素分组 ● 最少的依赖 ● 快速嵌套的直接了当的删除 ...
NULL 博文链接:https://jcs130.iteye.com/blog/1141839
NULL 博文链接:https://jcs130.iteye.com/blog/1624630
NULL 博文链接:https://jcs130.iteye.com/blog/1715026
NULL 博文链接:https://jcs130.iteye.com/blog/2236163
JCS缓存入门及简介
COVID-CS数据集和JCS模型该论文的官方资料库:JCS:通过联合分类和分段进行解释的COVID-19诊断系统,IEEE图像处理事务(TIP)2021。 该存储库包含: COVID-CS数据集数据。 我们的JCS模型的培训和测试代码。 本文已被...
jcs缓存所需要的包。导入这两个包即可使用jcs缓存策略
jcs-1.3资源包下载,没什么可描述的, 自己下载看吧
JCS在一般用在,查询数据库比较频繁,每次查询的结果都差不多,这样讲数据进行缓冲,可以 减轻数据库负担: 下面举个例子: 在一个点击量比较频繁的页面,调用一个数据列表,每个用户进去在某一时间段数据都一样,...
jcs 所需的三个jar包 还没来得及测试
简单的jcs实例,需要一些jar包,对于占用大量内存的代码可以考虑用jcs.
佳灵JCS高压变频器彩色样本PDF版pdf,佳灵JCS高压变频器彩色样本PDF版
commons-jcs针对web开发缓存处理
昆仑海岸 JCS大量程系列超声波物位变送器使用说明书PDF,昆仑海岸 JCS大量程系列超声波物位变送器使用说明书
JCS-018立时加工中心主轴箱及(sw+说明书+cad).rar
jcs-elpa网站 jcs-elpa主页的官方jcs-elpa 。 链接: :