码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate缓存

时间:2018-05-06 20:08:16      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:api   管理   方法   jar   least   导入   XML   clu   空闲   

1. 不使用缓存

<1>使用同一个session执行查询 对同个对象的第二次查询只是返回第一册查询结果 而不是重新使用SQL语句对数据库进行查询

2. 一级缓存(Session缓存)

  • 介绍
  1. 通过Session从数据库查询实体会把实体在内存中存储起来,下一次查询同一实体不再从数据库获取,而是从内存中获取
  2. 一级缓存的生命周期和Session相同
  • API
    一级缓存无法取消,用两个方法管理
    <1> evict(): 用于将某个对象从Session的一级缓存中清除
    <2> clear(): 用于将一级缓存中所有对象全部清除
  • 问题
    <1> query.list()不会使用到缓存
    <2> query.iterate() 执行流程是 查询对象的ID 然后根据Id到缓存中找 没有找到 自己到数据库中找

    3. 二级缓存

  • 介绍
    每个Session共享缓存,不是默认开启
  • 配置步骤
    <1>JAR导入
    <2>SRC -> ehcache.xml
    <3>hibernate.cfg.cml 配置二级缓存入口(指定二级缓存的外部实现类)
    <4>在对应实体类的配置文件中开启二级缓存
  • <4>
    事务模式 只读
    <cache usage="read-only" include="all或者non-lazy" region="任意名"
    non-lazy 当本表关联其他表的属性时 不设置那个属性
    region对应的value可以在ehcache.xml中对应标签 设置他的缓存策略(最大缓存数量,缓存对象永久)

4. 二级缓存 & 一级缓存

  • 试用情况
    <1>很少被修改的数据

<2>不是很重要的数据,允许出现偶尔并发的数据

属性 | 一级缓存 | 二级缓存

---|--- | ---

缓存的范围|事务范围 每个事务都拥有单独一级缓存|应用范围,当前应用内所有事务共享

并发访问策略|不会出现并发问题|必须提供适当的并发访问策略

数据过期策略|没有数据过期策略|缓存对象的最大数目、最长时间、最长空闲时间等

缓存的软件实现|框架包含|第三方提供、可插拔集成

物理介质|内存|内存和硬盘

启用方式|默认启用、不可关闭|默认不启用、选择性开启

5. 缓存算法

LRU Least Recently Used
LFU Least Frequently Used
FIFO First In First Out

Hibernate缓存

标签:api   管理   方法   jar   least   导入   XML   clu   空闲   

原文地址:https://www.cnblogs.com/Coeus-P/p/8999145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!