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了

原文地址:https://www.cnblogs.com/ouzilin/p/4977167.html