Hibernate | 一二三级缓存详解

2018-09-17  本文已影响0人  cengel

Hibernate缓存简介和对比、一级缓存、二级缓存详解
hibernate缓存机制

1.缓存类型:

1.1 事务范围(单Session即一级缓存) 基于线程

事务缓存只能被当前事务缓存,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式。缓存的生命周期依赖于事务的生命周期。事务缓存使用==内存==做存储介质

1.2. 应用缓存(单SessionFactory即二级缓存) ,基于进程的缓存

应用程序的缓存,可以被应用程序内所有事务共享。缓存的生命周期依赖于应用的生命周期。应用级别的缓存可以使用==内存或硬盘==做存储介质。

1.3. 集群范围(多SessionFactory即三级缓存)

在集群环境中,缓存被一个或多个机器的进程共享,缓存数据被复制到集群的每个进程节点下。进程间通过远程通信来保证缓存中的数据一致,缓存数据通常采用对象的松散数据形式

2 缓存机制

2.0 简易示例

//本行是二级缓存,如果二级缓存有数据,则从缓存取,没有则查询数据库
DotaHero dotaHero = hibernateTemplate.execute(session -> (DotaHero) session.createSQLQuery("select * from dota_hero where id = 1 ").addEntity(DotaHero.class).setCacheable(true).setCacheMode(CacheMode.GET).uniqueResult());
//本行不会查询数据库使用一级缓存(session级别的缓存)
dotaHero = dotaHeroService.get(1);
dotaHero = dotaHeroService.get(1); //如上不会查询数据库

===> 控制台打印
Hibernate: 
    select
        dotahero0_.ID as ID1_0_0_, //(说明存在二级缓存)
        ...
    from
        DOTA_HERO dotahero0_ 
    where
        dotahero0_.ID=?
        
sql只执行了一次

2.1 一级缓存

hibernate(二)一级缓存和三种状态解析

2.2 二级缓存

hibernate(九) 二级缓存和事务级别详讲

2.1 cacheMode 缓存模式
上一篇下一篇

猜你喜欢

热点阅读