zoukankan      html  css  js  c++  java
  • 第四讲 Hibernate 缓存管理

    缓存原理?

    将一些重要的、核心数据加载到内存中,存放起来;当应用程序需要访问该数据时,直接从内存中获取该数据;(从内存中获取数据,而不是从磁盘上读取数据)

     

    Hibernate中的缓存管理:

    Hibernate中缓存分为:一级缓存(Session缓存)、二级缓存(SessionFactory缓存)。

    一级缓存(Session缓存)由Hibernate自带。

    特点:

    1. 必须使用。

    2. session关闭的时候,缓存自动清空。

    3. 手动清除缓存。(clear()——清除所有session中的缓存;evict(Object obj)——清除指定的对象; flush() —— 刷新缓存)

     

    二级缓存(SessionFactory缓存)Hibernate提供支持的接口(外部缓存库)。

    特点:

    1. 所有用户可以共享数据。(跟具体的session对象无关)

    2. 消耗更多的内存资源。

    3. 查询速度变快、修改时(增、删、改)需要维护缓存和数据库。

     

    如何使用二级缓存(步骤)(EHCache缓存):

    1. 修改hibernate.cfg.xml配置文件。(指定缓存插件、启动二级缓存功能)

     

    <property name="cache.provider_class">
            org.hibernate.cache.EhCacheProvider
    </property>
    <property name="cache.use_second_level_cache">true</property>

     

    1. 在src目录下,创建EHCache缓存的配置文件(ehcache.xml)。

     

    2. 在*.hbm.xml配置文件中,添加<cache usage="read-write"/>。

     

     

     

    注意:

    清除二级缓存中的对象:
    //清除所有类型
    HibernateSessionFactory.getSessionFactory().evict(Emp.class);
    
    //清除指定对象
    HibernateSessionFactory.getSessionFactory().evict(Emp.class, 1);
    
    //清除集合中的所有对象
    HibernateSessionFactory.getSessionFactory().evictCollection("com.zuxia.entity.Dept.emps");
    时间到达时,自动清除对象:
    <defaultCache maxElementsInMemory="500" eternal="false"
    timeToIdleSeconds="时间" timeToLiveSeconds="时间" overflowToDisk="true" />
    当时间到达时,自动清除对象;eternal="false"必须为false才有效。
    HQL语句默认不会执行缓存查询:
    <property name="cache.use_query_cache">true</property>
    查询时,调用Query中setCacheable(true)方法进行缓存查询。
    注意:根据HQL查询语句,缓存对象。(两条语句相同时,才能执行查询缓存)

     

  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/lljj/p/Hibernate04.html
Copyright © 2011-2022 走看看