Hibernate 二级缓存和查询缓存

一级缓存:
    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属性(二级缓存区块的名称)

猜你喜欢

转载自blog.csdn.net/m0_38068812/article/details/83960190
今日推荐