二级缓存配置和原理

二级缓存是进程或集群范围内的缓存,可以被所有的Session共享

二级缓存是可配置的插件

01.二级缓存的配置使用(ehcache缓存)

*1.引入如下jar包。

ehcache-1.2.3.jar  核心库

backport-util-concurrent.jar

commons-logging.jar

*2.配置Hibernate.cfg.xml开启二级缓存

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

*3.配置二级缓存的供应商

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

在大配置文件(hibernate.cfg.xml)中配置

<class-cache    usage="read-write" class="cn.happy.entity.Student"/>
<collection-cache usage="read-write" collection=""/>

二级缓存保存数据原理:

二级缓存测试:

/**
     * 测试二级缓存
     */
        @Test
           public void testBulk(){
               //获取的数据一样
               Session session = HibernateUtil.getSession();
               Transaction tx=session.beginTransaction();
               Dept dept = (Dept)session.get(Dept.class,1);
               System.out.println(dept.getDeptName());
               tx.commit();
               HibernateUtil.closeSession();

               System.out.println("===========================");

               //因为有二级缓存    所以 不显示SQL语句
               Session session2 = HibernateUtil.getSession();
               Transaction tx2=session2.beginTransaction();
               Dept dept2 = (Dept)session2.get(Dept.class,1);
               System.out.println(dept2.getDeptName());
               tx2.commit();
               HibernateUtil.closeSession();

           }

运行结果:

因为有二级缓存,都是查询部门名称,所以第二次查询不显示SQL语句

测试查询缓存:

list()方法

/**
         * 测试查询缓存
         *
         */
        @Test
        public void testCache(){
            session=HibernateUtil.getSession();
            Transaction tx=session.beginTransaction();
            Query query = session.createQuery("from Emp");

            //list()只能放数据   不能取出
            List<Emp> list = query.list();
            for (Emp emp : list) {
                System.out.println(emp.getEmpName());
            }
            System.out.println("================================");

            //不显示SQL:上一步已经放入        二级缓存
            List<Emp> list1 = query.list();
            for (Emp emp : list1) {
                System.out.println(emp.getEmpName());
            }

            System.out.println("================================");

         }

运行结果

首先放入数据,list()方法只能放入数据,不能取出数据,所以当运行查询语句,显示了两条SQL语句,这说明了ist()方法只能放入数据,不能取出数据,内存地址不同,所以显示两条SQL语句

iterate()方法

运行结果:

iterate()方法可以取出数据,运行查询语句,显示两条SQL,但是这两条SQL是不一样的,印证了iterate()方法可以取出数据

时间: 2024-08-27 17:08:00

二级缓存配置和原理的相关文章

Hibernate4之二级缓存配置

一级缓存.二级缓存.查询缓存 1.什么是缓存 a) 在内存中开辟一块空间,把本来应该存储在硬盘上的东西,放到内存里,将来再要读取的时候,从内存读取,这部分内容就是缓存. 2.什么是一级缓存 a) 即session级别的缓存 3.什么是二级缓存 a) SessionFactory级别的缓存,可以跨越session存在 缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache.缓存目的:让数据更接近于应用程序,协调速度不匹

MyBatis的二级缓存的设计原理

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个 SqlSession对象会使用一个 Executor对象来完成会话操作, MyBatis的二级缓存机制的关键就是对这个 Executor对象做文章.如果用户配置了" cacheEnabled=true",那么 MyBatis在为 Sql

《深入理解mybatis原理》 MyBatis的二级缓存的设计原理

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章.如果用户配置了"cacheEnabled=true",那么MyBatis在为SqlSession

《深入理解mybatis原理7》 MyBatis的二级缓存的设计原理

<深入理解mybatis原理> MyBatis的二级缓存的设计原理 MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章.如果用户配置了"cache

Hibernate 二级缓存配置

详见:https://www.cnblogs.com/Junsept/p/7324981.html Hibernate的cache管理: Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起到一个蓄水池和缓冲的作用.Cache对于大量依赖数据读取操作的系统而言尤其重要.在大并发量的情况下,如果每次程序都需要向数据库直接做查询操作,它们所带来的性能开销是显而易见的,频繁的网络舆,数据库磁盘的读写操作都会大大降低系统的性能.此时如果能让数据库在本地内存中保留一个镜像,下次访问的时候只需要从

Hibernate二级缓存配置

一.定义: 二级缓存是进程或集群范围内的缓存,可以被所有的Session共享,是可配置的插件 二.二级缓存原理图 解析:每次从二级缓存中取出的对象,都是一个新的对象. 三.配置步骤如下: 同理:以员工类和部门类为例 ① 引入jar包 ② 关键点: 大配置Hibernate.cfg.xml开启二级缓存 ③ 在src下添加ehcache.xml文件,从etc获取文件即可. ④测试二级缓存(数据散装的特点) public class Test1 { Session session; Transacti

SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 整体思路 pomxml中加入Maven依赖 引入applicationContextxml中引入redis配置 创建缓存实现类RedisCache 创建中间类RedisCacheTransfer完成RedisCachejedisConnectionFactory的静态注入 配置文件redisproperties mapper中加入MyBatis二级缓存 Mybatis全局配置 打印Sql日志方便测试 测试代码 项目环境: 在

SpringMVC +Spring + MyBatis + Mysql + Redis(作为二级缓存) 配置

转载:http://blog.csdn.net/xiadi934/article/details/50786293 项目环境: 在SpringMVC +Spring + MyBatis + MySQL.Redis部署在Linux虚拟机. 1.整体思路 参考Ehcache实现MyBatis二级缓存代码(Maven引用对应jar查阅) 使用Spring管理Redis连接池 模仿EhcacheCache,实现RedisCache 2.pom.xml中加入Maven依赖 1 <!-- spring-re

MyBatis二级缓存配置

正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 Mybatis二级缓存是SessionFactory,如果两次查询基于同一个SessionFactory,那么就从二级缓存中取数据,而不用到数据库里去取了. 1. 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空. 2. 二级缓存与一级缓存其机制相同,默认也是采用