【hibernate框架】缓存机制之查询缓存

查询缓存是面对重复缓存的,是依赖于二级缓存的,所以一定要打开二级缓存。

1.load默认使用二级缓存,iterate默认使用二级缓存
2.list默认往二级缓存中加数据,但是查询的时候不使用
3.如果要query用二级缓存,需打开查询缓存
i.<property name="cache.use_query_cache">ture</property>
ii.调用Query的setCacheable(true)方法指明使用二级缓存。

证明查询缓存已经起作用了:

@Test
	public void testListAndIterate2(){
		Session session = sf.openSession();
		session.beginTransaction();
	Query q=session.createQuery("from Topic").setCacheable(true);
		List<Topic> topics=(List<Topic>)q.list();
		for(Topic t:topics){
			System.out.println(t.getId()+"-"+t.getTitle());
		}
		List<Topic> topics2=(List<Topic>)q.list();
		for(Topic t:topics2){
			System.out.println(t.getId()+"-"+t.getTitle());
		}
		session.getTransaction().commit();
		session.close();
	}

发现只输出了一条查询语句,说明加第二次载了缓存:
Hibernate: 
    select
        category0_.id as id0_0_,
        category0_.name as name0_0_ 
    from
        Category category0_ 
    where
        category0_.id=?
c0

c0

PS:说一下主流的缓存算法

缓存算法就是指定内存里面哪个对象在适当的时候该拿走

a.LRU、LFU、FIFO
1.Least Recently Used
翻译是"最近很少使用",也就是最近很少使用的会被清除,每个在缓存中的对象都有存在的时间标志,哪一个时间长,就会被拿走。
2.Least Frequently Used(命中率高低)
最近不常被使用,最少被使用。缓存中有两个对象,一个被命中1回,一个被命中100回,那么新来一个对象的时候,就会清除那个命中1回的那个。
3.First In First Out
就是一个队列,后面进一个,前面走一个。

在ehcache的配置文件中可以配置这个属性来设置缓存算法:
b.memoryStoreEvictionPolicy="LRU"(ehcache)

转载请注明出处:http://blog.csdn.net/acmman/article/details/44132287

时间: 2024-11-03 03:13:11

【hibernate框架】缓存机制之查询缓存的相关文章

详解Java的Hibernate框架中的注解与缓存_java

注解Hibernate注解是一个没有使用XML文件来定义映射的最新方法.可以在除或替换的XML映射元数据使用注解. Hibernate的注解是强大的方式来提供元数据对象和关系表的映射.所有的元数据被杵到一起的代码POJO java文件这可以帮助用户在开发过程中同时要了解表的结构和POJO. 如果打算让应用程序移植到其他EJB3规范的ORM应用程序,必须使用注解来表示映射信息,但仍然如果想要更大的灵活性,那么应该使用基于XML的映射去. 环境设置Hibernate注释 首先,必须确保使用的是JDK

【hibernate框架】缓存机制之一级缓存

什么是缓存:我们在内存中开辟一块空间,把本来应该存储在硬盘上的东西,然后给它放在内存里,将来要读的时候从内存中读,这个部分就叫做缓存. 在hibernate有三种缓存,一级缓存,二级缓存和查询缓存. 一级缓存是session级别的缓存. 例子: @Test public void testHuanCun(){ Session session = sf.openSession(); session.beginTransaction(); Category c=(Category)session.l

【hibernate框架】缓存机制之二级缓存

二级缓存是sessionFactory级别的缓存,可以跨越session存在. hibernate文档里关于二级缓存的说明: 二级缓存(The Second Level Cache) hibernate支持多种多样的二级缓存的实现,但hibernate本身并没有写二级缓存的实现(有一个是用来内部测试的,不要用于产品开发),而是由其他的厂商来提供. 表 21.1. 缓存策略提供商(Cache Providers) org.hibernate.cache.HashtableCacheProvider

iOS开发缓存机制之—内存缓存机制

在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制. 这篇文章将介绍一下如何在iOS设备中进行缓存,本文先介绍一下将内容缓存到内存中,下一篇文章就介绍一下在iOS磁盘上缓存内容.   使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLCache类.NSURLRequest需要一个缓存参数来说

详解Java的Hibernate框架中的缓存与原生SQL语句的使用_java

Hibernate缓存缓存是所有关于应用程序的性能优化和它位于应用程序和数据库之间,以避免数据库访问多次,让性能关键型应用程序有更好的表现. 缓存对Hibernate很重要,它采用了多级缓存方案下文所述: 第一级缓存: 第一级缓存是Session的缓存,是一个强制性的缓存,通过它所有的请求都必须通过. Session对象不断自身的动力的对象,提交到数据库之前. 如果发出多个更新一个对象,Hibernate试图拖延尽可能长的时间做了更新,以减少发出的更新SQL语句的数量.如果您关闭会话,所有被缓存

Hibernate 缓存机制全面讲解

简介 为了降低应用程序访问我们的数据的时候的频率,提高数据读取的速率.比如计算机中为了缓解CPU和内存之间速度差异而引入的缓存是一样的道理.Hibernate同样对缓存进行了支持,使得程序的运行效率得到了提高. 在Hibernate中,同一个session查询同一个数据时如果发现命中,就只会向数据库发送一条sql命令.不同的session会发送多次sql命令. 一级缓存 Hibernate一级缓存又称之为"Session缓存","会话期缓存",顾名思义就是在会话期才

【MyBatis框架】查询缓存-一级缓存原理

查询缓存 1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 缓存模式图如图 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据.不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的. 二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSessio

Mysql 第十日 字符集,XA事务,查询缓存

字符集和校对 客户端和服务器设置要要保持一致. 校对规则主要是mysql用来比较字符串,比如按照大小写敏感,或者是二进制. 分别对应了cs,ci(不敏感),bin三个对应项 可以指定校对规则对字段排序,但是这样可能会不使用原来的索引. 分布式事务 XA事务需要一个事务协调器来保证所有的事务参与者都完成了准备工作(第一阶段). 都准备好,则提交所有事务(第二阶段). Mysql不能扮演这个协调者,只能是参与节点. 内部XA 平衡多个存储引擎, 以及存储引擎和写二进制日志之间. 如果打开了写二进制日

java文件操作及缓存机制依旧有瓶颈

我们在使用windows系统时发现,复制一个文件的再粘贴的速度大体上是一致的,我们可以猜想这是微软内部的工作人员设计的一个算法,而这个操作所能实现的最大速度是由什么影响的呢?? 那么我们可不可以自己设计一个方法来代替windows自带的复制粘贴方法来达到更快的传输速度呢?? 下面的一段代码就以缓冲的形势来实现了文件的copy工作: publicvoid copybyte(String srcFile,String destFile)throws IOException{ //创建输入流 Inpu