• hibernate缓存


    缓存,什么是缓存

      缓存是指在内存中开辟一块空间,将硬盘中的数据存储在内存。实现访问速度的提高。提升效率

    hibernate中的缓存大体分为三种

    1. 一级缓存
    2. 二级缓存
    3. 查询缓存(查询缓存是一种特殊的二级缓存)

    一级缓存可称为session级缓存,一级缓存是运用在同一session中的

    Session session = sf.openSession();
            session.beginTransaction();
            Category c = (Category)session.load(Category.class, 1);
            System.out.println(c.getName());
            
            Category c2 = (Category)session.load(Category.class, 1);
            System.out.println(c2.getName());
            session.getTransaction().commit();
            session.close();

    上述代码只访问数据库一次

            Category c2 = (Category)session.load(Category.class, 1);
        

    查询session缓存中是否有该元素

    如果执行下述代码,则会访问两次数据库

    Session session = sf.openSession();
            session.beginTransaction();
            Category c = (Category)session.load(Category.class, 1);
            System.out.println(c.getName());
            
            
            session.getTransaction().commit();
            session.close();
            
            Session session2 = sf.openSession();
            session2.beginTransaction();
            Category c2 = (Category)session2.load(Category.class, 1);
            System.out.println(c2.getName());
            
            
            session2.getTransaction().commit();
            session2.close();

    一级缓存只是作用于同一session中,带来了很多局限性。例如在多线程中,一个线程创建一个session,多个线程访问同一元素,则会访问多次数据库。这样效率会大大降低,解决的方案是建立一个“大”的session缓存。这时候就要引进了二级缓存。
    二级缓存是sessionfactory级别的缓存

    理解二级缓存需要理解缓存提供商

    上述为 cache providers,下面配置cache providers

    打开hibernate.cfg.xml 添加

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

    实体类中

    需要注意的,要加入ehcache的jar包

    然后就配置完session factory级别的缓存了。不同session执行同一语句访问一次数据库

    Actions that add an item to internal cache of the Session

    Saving or updating an item 默认使用一级缓存
    • save()

    • update()

    • saveOrUpdate()

    Retrieving an item  默认使用二级缓存
    • load()

    • get()

    • list()

    • iterate()

    • scroll()

    如果需要query使用二级缓存,需要打开查询缓存

    查询缓存的意思是使用query时,必须查询的语句相同。才可使用二级缓存

    Set the hibernate.cache.use_query_cache property to true.

    下面例子

    session缓存总结:缓存很少用,尤其是二级缓存,有点扯淡。也就面试时用的多。

      二级缓存适用于:

    • 改动小的数据
    • 经常被访问
    • 数据量小

    ok了

  • 相关阅读:
    2013年个人总结
    ASP.NET Core SignalR (一):SignalR 概述
    ASP.NET Core 中的配置 【上】
    .NET Core 服务器
    .NET Web 宿主(Web Host)【下】
    .NET Web 宿主(Web Host)【上】
    .NET 通用主机(Generic Host)
    ASP.NET Core中间件
    ASP.NET Core中的依赖注入【下】
    ASP.NET Core中的依赖注入【上】
  • 原文地址:https://www.cnblogs.com/ouzilin/p/4977167.html
Copyright © 2020-2023  润新知