hibernate的二级缓存
前言
今天为大家分享的知识点是hibernate中的二级缓存啦~
1、缓存的用处
它可以提高程序的性能
2、缓存的应用以及场景
2.1、 很少被修改或根本不改的数据
2.2、 字典数据
例如:小汽车专卖店的固定型号数据或者我们每个人的身份证号都是未曾修改过的,所以说这是缓存!
业务场景:耗时较高的统计分析sql、电话账单查询sql
3、ehcache的概念
Ehcache 是现在最流行的纯Java开源缓存框架,配置简单、结构清晰、功能强大
开源:指的是源代码免费开放,可进行二次开发!
注意:2.X版本和3.X相比而言,3.x的版本和2.x的版本API差异比较大
Redis处理的是分布式缓存!
4、ehcache的特点
4.1 够快
Ehcache终被设计于large,high concurrency systems.
4.2 够简单
开发者提供的接口简单明了,
从Ehcache的搭建到运用运行仅仅需要几分钟,
Ehcache被广泛的运用于其他的开源项目
4.3 够袖珍
一般Ehcache的发布版本不会到2M
4.4 够轻量
核心程序仅仅依赖slf4j这一个包,没有之一!
4.5 好扩展
Ehcache提供了对大数据的内存和硬盘的存储,
最近版本允许多实例、保存对象高灵活性、
提供LRU、LFU、FIFO淘汰算法,
基础属性支持热配置、支持的插件多
4.6 监听器
缓存管理器监听器 (CacheManagerListener)
和 缓存监听器(CacheEvenListener),
做一些统计或数据一致性广播挺好用的
4.7 分布式缓存
从Ehcache 1.2开始,支持高性能的分布式缓存,
兼具灵活性和扩展性
5、一级缓存与二级缓存
1、一级缓存(session)
2、二级缓存(sessionFactory)
6、 cacheManager的使用
CacheManager:缓存管理器
Cache:缓存对象,缓存管理器内可以放置若干cache,存放数据的实质,所有cache都实现了Ehcache接口
Element:单条缓存数据的组成单位
顺序层次:ehcache.xml->CacheManager->Cache->Element(javabean),缓存对象及其属性都可序列化 。
Ehcache二级缓存的配置
1、导入相关依赖
pom.xml文件
当然这些需要导入的jar包依赖代码不需手写,只需去添maven的中央仓库中复制代码即可~
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wangqiuping</groupId>
<artifactId>Cache</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>hibrenate Maven Webapp</name>
<url>http://maven.apache.org</url>
<!--相关依赖版本的配置-->
<properties>
<servlet.version>4.0.1</servlet.version>
<junit.version>3.8.1</junit.version>
<MySQL.version>5.1.44</MySQL.version>
<jstl.version>1.2</jstl.version>
<hibernate.version>5.2.12.Final</hibernate.version>
<ehcache.version>2.10.0</ehcache.version>
</properties>
<dependencies>
<!-- servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<!-- junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- MySQL依赖 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${MySQL.version}</version>
</dependency>
<!-- jstl依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- taglibs依赖-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- tomcat依赖 -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>8.5.56</version>
</dependency>
<!--hibernate依赖-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!--ehcache依赖-->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>${ehcache.version}</ver