• 第四讲 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查询语句,缓存对象。(两条语句相同时,才能执行查询缓存)

     

  • 相关阅读:
    POJ 1811 大整数素数判断 Miller_Rabin
    hdu 4940 无源汇有上下界最大流
    hdu 4975 最大流解决行列和求矩阵问题,用到矩阵dp优化
    hdu 4971 多校10最大权闭合图
    hdu 4888 最大流给出行列和求矩阵
    poj 3621最优比例生成环(01分数规划问题)
    poj 2728 最优比例生成树(01分数规划)模板
    最优比例生成树最优比率生成树 01分数规划问题
    poj 2553强连通+缩点
    poj 2831 次小生成树模板
  • 原文地址:https://www.cnblogs.com/lljj/p/Hibernate04.html
Copyright © 2020-2023  润新知