二级缓存
一级缓存:
1,在session上面有一个一级缓存;一级缓存的生命周期和session相同,一级缓存最大生命周期就是一个线程;在web环境下面,session的最大生命周期就是一次请求;
2,一级缓存可以用来干嘛?
1,只能有限的提高一点点系统性能;
2,最重要的功能:提供给了一个临时存放持久化对象的空间;
在更多的情况下,我们要提高的性能的数据往往是不同请求,请求的相同数据;
二级缓存概念:
1,生命周期为整个应用的缓存(二级缓存是sessionfactory上的缓存,能提供整个应用中所有的session使用,可以在不同的请求之间共享缓存的数据)
2,所有的get,load方法,总是先查一级缓存,再查二级缓存,如果都没有,再去数据库里面查询。
附加:二级缓存的原理;
二级缓存其实就是个缓存.什么是缓存?其实简单理解就是一个Map;
4,二级缓存有一些性能的指标
1、命中率(总的从二级缓存中取得的数量/总的取的数量)
2、最大对象数量;
3、最大空闲时间;
4, 移除数据策略;FIFO FILO LRU
5,二级缓存实际上就是一个缓存,所以,hibernate并没有实现自己的二级缓存框架,而是用的开源的缓存框架。
Hibernate中二级缓存的使用:
1,常见的开源的二级缓存框架
2,Ehcache作为hibernate二级缓存
1,ehcache相关jar包;
2,拷贝ehcache.xml(ehcache的配置文件);
3,告诉hibernate,我现在用的是哪一个缓存框架;
4,hibernate中配置好二级缓存:
5,指定哪些实体对象需要二级缓存: 1,在映射文件中添加;
3,usage的作用:usage代表对象缓存策略;怎么使用二级缓存;
1,usage="read-only" :放到二级缓存里面的对象是只读,不能被直接修改(性能最高)
2,usage="read-write":允许读写(对并发支持较好)
3,usage="nonstrict-read-write":允许读写,但是在并发事务情况下会产生脏数据
4,usage="transactional" :允许读写,并且支持全事务(只能在APPlicationServer环境下有用)
4,ehcache的配置:
1,maxElementsInMemory:该缓存池放在内存中最大的缓存对象个数;
2,eternal:是否永久有效,如果设置为true,内存中对象永不过期;
3,timeToIdleSeconds:缓存对象最大空闲时间,单位:秒;
4,timeToLiveSeconds:缓存对象最大生存时间,单位:秒;
5,overflowToDisk:当内存中对象超过最大值,是否临时保存到磁盘;
6,maxElementsOnDisk:能保存到磁盘上最大对象数量;
7,diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒
8,memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。
默认策略是LRU(最近最少使用),可以设置为FIFO(先进先出)或是LFU(较少使用)
说明:
1,默认情况下,所有的对象都是缓存在ehcache的defaultCache中;
2,一定注意,dafaultCache,eternal不能设置为true
3,把一个类放在指定的二级缓存区域中(可以细粒度的管理二级缓存的性能);
1,给一个类添加region属性(二级缓存区块的名称)
相关阅读
数据库中根据你的查询条件只会返回唯一结果,就可以用uniqueResult这个方法!否则就用list();其返回类型为Object uniqueResult()方法通
Spring整合HIbernate和springmvc 1.导入jar包 <properties> <org.springframework.version>4.2.0.RELEASE</org.springfram
HQL语句查询 // 使用HQL查询表的所有记录 Session session = HibernateUitl.getOpenSession()
7.1 Hibernate:内置生成器 -- assigned
assigned 是 Hibernate 内置的默认生成器策略,应用程序应该对持久化对象的唯一标识符赋值。 特点:可以跨数据库,人为控制主键生成,建
Hibernate状态 (merge,attachDirty,attachClean)
在Hibernate中的对象有三种状态,即:瞬时状态(Transient)、持久状态(Persistent)、脱管状态(Detached)1、瞬时状态(Transient)由new