简介

Ehcache 是一个开源的高性能缓存,拥有很高的拓展性和伸缩性,广泛使用各种 Java 项目中(如 Hibernate 默认使用 Ehcache作为二级缓存),在目前基于 Java 的缓存方案里,几乎是性能最高的实现。

Ehcache 官网:http://www.ehcache.org

Ehcache 3.X 技术文档:http://www.ehcache.org/documentation/

配置Ehcache

配置Ehcache有两种方式:编码配置、 配置文件配置

编码配置

CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().withCache("feilcache",
CacheConfigurationBuilder
.newCacheConfigurationBuilder(String.class, String.class, ResourcePoolsBuilder.heap(10)))
.build();
cacheManager.init();
Cache<String, String> feilcache = cacheManager.getCache("feilcache", String.class, String.class);
feilcache.put("1", "1");
System.out.println(feilcache.get("1"));
cacheManager.close();
  1. 通过构建器模式定义了别名为feilcache的缓存,key、value均为String。JVM byted-size 堆缓存设置大小。
  2. 进行init初始化。
  3. 通过别名获取缓存并添加缓存。
  4. 最后不要忘记最重要的关闭资源。

存储层

Ehcache3.x提供了一种分层模型。ehcache 的缓存储存主要分为以下3层:

  • heap:JVM byted-size 堆缓存,速度最快;
  • off-heap:JVM 堆外内存,速度低于 heap,但是高于 disk;
  • disk:磁盘储存,速度最低,相对于 heap ,off-heap可以分配大量资源空间;
<span style="color:#333333"><code class="language-java">CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().withCache("tieredCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, EntryUnit.ENTRIES)
.offheap(10, MemoryUnit.MB))
)
.build(true); cacheManager.close();</code></span>

上面的例子分配了非常少量的堆外。请记住,堆外存储的数据必须被序列化和反序列化 - 因此比堆慢。因此,您应该支持大量数据的堆外堆,其中堆上会对垃圾收集产生太严重的影响。不要忘记-XX:MaxDirectMemorySize根据您打算使用的堆外大小在java选项中定义该选项。

磁盘持久性

<span style="color:#333333"><code class="language-java">PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(getStoragePath() + File.separator + "myData"))
.withCache("persistent-cache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, EntryUnit.ENTRIES)
.disk(10, MemoryUnit.MB, true))
)
.build(true); persistentCacheManager.close();</code></span>

如果您希望使用磁盘存储(例如对于持久Cache实例),则必须提供将数据存储在磁盘上的CacheManagerBuilder.persistence(String)静态方法的位置。

定义磁盘的资源池。第三个参数是一个布尔值,用于设置磁盘池是否持久。设置为true时,池是持久的,当设置为false时,池不是持久的。如果在没有第三个布尔参数的情况下使用此方法,则池不是持久的。

数据新鲜度

<span style="color:#333333"><code class="language-java">CacheConfiguration<Long, String> cacheConfiguration = CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.heap(100))
.withExpiry(Expirations.timeToLiveExpiration(Duration.of(20, TimeUnit.SECONDS)))
.build();</code></span>

到期是在缓存级别配置的,因此首先定义缓存配置,

然后添加一个Expiry,这里使用预定义的生存时间,配置所需的Duration。

使用XML配置

<cache alias="foo"> 

    <key-type>java.lang.String</key-type> 

    <resources>

      <heap unit="entries">2000</heap> 

      <offheap unit="MB">500</offheap> 

    </resources>

  </cache>

<cache-template name="myDefaults"> 

    <key-type>java.lang.Long</key-type>

    <value-type>java.lang.String</value-type>

    <heap unit="entries">200</heap>

  </cache-template>

<cache alias="bar" uses-template="myDefaults"> 

    <key-type>java.lang.Number</key-type>

  </cache>

<cache alias="simpleCache" uses-template="myDefaults" />

1.声明Cache别名foo

2.密钥foo被声明为类型String; 由于未指定值类型,因此值将为type Object。

3.foo 声明在堆上最多可容纳2,000个条目......以及在开始驱逐之前最多500 MB的堆外内存

4.<cache-template>使用元素可以创建一个抽象配置,进一步<cache>配置可以扩展

5.bar是这样的Cache。 bar使用<cache-template>命名myDefaults并覆盖key-type更广泛的类型。

6.simpleCache是另一个这样的Cache。它使用myDefaults配置为其唯一CacheConfiguration。

为了解析XML配置,您可以使用以下XmlConfiguration类型:

final URL myUrl = this.getClass().getResource("/my-config.xml"); 

Configuration xmlConfig = new XmlConfiguration(myUrl); 

CacheManager myCacheManager = CacheManagerBuilder.newCacheManager(xmlConfig);

1.获取URLXML文件的位置

2.实例化XmlConfiguration将XML文件的URL传递给它

3.使用静态org.ehcache.config.builders.CacheManagerBuilder.newCacheManager(org.ehcache.config.Configuration)可以CacheManager使用Configurationfrom 来创建实例XmlConfiguration

Ehcache3.x学习(一)入门的更多相关文章

  1. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  2. [IT学习]sql 入门及实例

    sql 是一种数据库查询语言,可以让你很快的查询到数据.其实一般情况下,你也可以采用excel来查询数据库数据. 但是人们通常认为sql会更加灵活和方便一些. sql学习的入门网站: http://w ...

  3. PHP学习笔记 - 入门篇(5)

    PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...

  4. PHP学习笔记 - 入门篇(4)

    PHP学习笔记 - 入门篇(4) 什么是运算符 PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要 ...

  5. PHP学习笔记 - 入门篇(3)

    PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...

  6. PHP学习笔记--入门篇

    PHP学习笔记--入门篇 一.Echo语句 1.格式 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来) 如下代码 <?php echo "Hello world! ...

  7. netty深入学习之一: 入门篇

    netty深入学习之一: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NI ...

  8. LESS学习笔记 —— 入门

    今天在网上完成了LESS的基础学习,下面是我的学习笔记.总共有三个文件:index.html.main.less.mian.css,其中 mian.css 是 main.less 经过Koala编译之 ...

  9. Java工程师学习指南 入门篇

    Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  10. .NET学习从入门到精通100+源代码(申明:来源于网络)

    .NET学习从入门到精通100+源代码大放送 (20161128更新)(申明:来源于网络) 地址:http://download.csdn.net/album/detail/3364

随机推荐

  1. 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST

    AND: 逻辑与 ;该指令会置 CF=OF=; 其结果影响 SF.ZF.PF ;指令格式: AND r/m, r/m/i ; Test22_1.asm - 使用 AND 运算将一个数的第二.四位清零 ...

  2. STM32嵌入式开发学习笔记(二):将功能封装为库文件

    将所有的函数都堆在main.c文件里不是好的选择,庞大的代码文件会是你维护的障碍,明智的做法是,一种功能封装到一个库文件里. 库文件就是你代码开始部分写的#include<xxxx.h>里 ...

  3. Ubuntu管理员密码设置

    最近学习嵌入式编程,首先准备搭建一个嵌入式开发环境. 由于想省钱,就准备搭建一个虚拟的arm系统用于测试学习. 虚拟系统搭建与linux系统上,暂定使用Ubuntu+qemu进行环境搭建. 在进行Ub ...

  4. springboot使用自带连接池连接postgre

    Application配置spring.datasource.url=jdbc:postgresql://***:5432/postgresspring.datasource.username=pos ...

  5. 9. DMA

    9.1 介绍 Direct memory access(DMA) 直接存储器访问. 这两个DMA控制器总共有16个流(每个控制器8个),每个流用于管理来自一个或多个外围设备的内存访问请求.每个流总共可 ...

  6. 使用CSS将图片转换成黑白(灰色、置灰) & 毛玻璃效果

    法1⃣️: IE浏览器: filter: gray; 其他浏览器: .gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(10 ...

  7. 前端(六)—— 伪类选择器:a标签的伪类、内容伪类、索引伪类、取反伪类

    a标签的伪类.内容伪类.索引伪类.取反伪类 一.a标签的四大伪类 :link:未访问状态 :hover:悬浮状态 :active:活跃状态 :visited:已访问状态 四大伪类也可用于其他标签 &l ...

  8. C#WinForm 窗体回车替换Tab

    /// <summary> /// 回车切换控件 /// </summary> /// <param name="sender"></pa ...

  9. what have we learnt in day five

    what is file? virtual unit offered by operation system steps to open file 1.find the file_path(file_ ...

  10. 微信小程序のwxml列表渲染

    列表渲染存在的意义 以电商为例,我们希望渲染5个商品,而又希望容易改变,我们就要在wxml中动态添加. <view> <block wx:for="{{products}} ...