摘要:今天就介绍一款常用的缓存框架。设置缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。内存不足时,是否启用磁盘缓存。磁盘失效线程运行时间间隔,默认是秒。
在当今大数据爆发时代,数据量每天都呈“爆炸式”增长,频繁的数据库访问无疑给数据库带来的极大负载,除了增大物理服务器的数量,我们也可以将一些常用的、公共的资源以cache形式放在客户端或者靠近客户端的服务器上,从而减少了服务器的负载,进一步也改善了系统的整体性能。今天就介绍一款常用的缓存框架---EhCache。什么是EhCache?
ehcache是现在最流行的纯java开源框架,配置简单,结构清晰,功能强大,最初知道它,是从hibernate的缓存开始的。网上中文的ehcache材料以简单的介绍和配置方法居多,如果你有这方面的问题,请自行看官网api文档,但是很少见到特性说明和对实现原理的分析,因此在这这篇文章里面,我会详细介绍和分析ehcache的特性,加上一些自己的理解和思考,希望对缓存感兴趣的朋友有所收获。EhCache入门教程
新建一个maven项目
在maven项目的pom.xml文件中添加对EhCache及Spring的依赖,如下所示:
4.0.0 com.imooc Ehcache 0.0.1-SNAPSHOT jar Ehcache http://maven.apache.org UTF-8 4.10 4.2.3.RELEASE net.sf.ehcache ehcache 2.10.2 junit junit ${junit.version} test org.springframework spring-test ${spring.version} test org.springframework spring-webmvc ${spring.version} org.springframework spring-core ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-context-support ${spring.version} aliyun aliyun http://maven.aliyun.com/nexus/content/groups/public
在src/main/resources目录下创建ehcache的配置文件ehcache.xml,如下:
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
针对ehcache的配置文件的参数进行详细说明:
diskStore : ehcache支持内存和磁盘两种存储
path :指定磁盘存储的位置
默认cache参数配置说明:
defaultCache : 默认的缓存
* maxEntriesLocalHeap=”10000” * eternal=”false” * timeToIdleSeconds=”120” * timeToLiveSeconds=”120” * maxEntriesLocalDisk=”10000000” * diskExpiryThreadIntervalSeconds=”120” * memoryStoreEvictionPolicy=”LRU”
cache :自定的缓存,当自定的配置不满足实际情况时可以通过自定义(可以包含多个cache节点)
* name : 缓存的名称,可以通过指定名称获取指定的某个Cache对象 * maxElementsInMemory :内存中允许存储的最大的元素个数,0代表无限个 * clearOnFlush:内存数量最大时是否清除。 * eternal :设置缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。根据存储数据的不同,例如一些静态不变的数据如省市区等可以设置为永不过时 * timeToIdleSeconds : 设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。 * timeToLiveSeconds :缓存数据的生存时间(TTL),也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。 * overflowToDisk :内存不足时,是否启用磁盘缓存。 * maxEntriesLocalDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。 * maxElementsOnDisk:硬盘最大缓存个数。 * diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。 * diskPersistent:是否在VM重启时存储硬盘的缓存数据。默认值是false。 * diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
ehcache缓存的3种清空策略:
1 FIFO,先进先出
2 LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。
3 LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
编辑代码测试Ehcache
package com.imooc.Ehcache;
import java.io.InputStream;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
/**
* 通过配置文件(ehcache.xml)来使用缓存 * @author Administrator
*/ public class EhCache2 { public static void main(String[] args) { //通过读取ehcache配置文件来创建缓存管理器即CacheManager InputStream in = EhCache2.class.getClassLoader().getResourceAsStream("ehcache1.xml"); CacheManager cacheManager = CacheManager.create(in); // 创建一个缓存实例(在配置文件中获取一个缓存实例) final Cache cache = cacheManager.getCache("helloworld1"); final String key = "greeting"; final String key1 = "greeting1"; //创建一个数据容器来存放我们所创建的element final Element putGreeting = new Element(key, "Hello, World!"); final Element putGreeting1 = new Element(key1, "Hello Ehcache"); //将数据放入到缓存实例中 cache.put(putGreeting); cache.put(putGreeting1); //取值 final Cache cache2 = cacheManager.getCache("helloworld1"); final Element getGreeting = cache2.get(key); final Element getGreeting1 = cache2.get(key1); // Print the value System.out.println("value======//========"+getGreeting.getObjectValue()); System.out.println("value1=====//========"+getGreeting1.getObjectKey()); } }
结果验证,如果后台输出如下字段即在指定的cache存放文件夹找到创建的cache就说明我们打开了学习EhCache大门。
后台输出: value======//========Hello, World!
value1=====//========greeting1
最后附上本次实例的源码:
链接:https://pan.baidu.com/s/1nu6rrz7 密码:p5vw
Ehcache官方文档下载链接:链接:https://pan.baidu.com/s/1cyg3Tk 密码:0zf0
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/68077.html
摘要:一级缓存值得注意的地方默认就是支持一级缓存的,并不需要我们配置和整合后进行代理开发,不支持一级缓存,和整合,按照的模板去生成代理对象,模板中在最后统一关闭。总结的一级缓存是级别的。 前言 本文主要讲解Mybatis的以下知识点: Mybatis缓存 一级缓存 二级缓存 与Ehcache整合 Mapper代理 使用Mapper代理就不用写实现类了 逆向工程 自动生成代码 ...
摘要:添加用户接口类简单用户链接数据库微服务通过注解标注该类为持久化操作对象。查找用户数据保存用户数据更新用户数据删除用户数据这是清除缓存添加缓存配置缓存配置。对象是否永久有效,一但设置了,将不起作用。设置对象在失效前允许存活时间单位秒。 SpringCloud(第 045 篇)链接Mysql数据库简单的集成Mybatis、ehcache框架采用MapperXml访问数据库 - 一、大致介绍...
摘要:官网源码推荐从开始手写一个框架更多请在技术栈微信公众号后台回复关键字。是一个开放源代码的对象关系映射框架,它对进行了非常轻量级的对象封装,它将与数据库表建立映射关系,是一个全自动的框架。 Java 程序员方向太多,且不说移动开发、大数据、区块链、人工智能这些,大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天...
摘要:前言如题,今天介绍的数据缓存。说明确实做了数据缓存,第二次的测试结果是从数据缓存中获取的,并没有直接查数据库。为为的数据做了缓存插入数据返回的结果数据库中的结果访问结果如下图。后语以上为数据缓存的教程。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 如题,今天介绍 SpringBoot 的数据缓存。做过开发的都知道程序的瓶颈在于数据库,我们也知道内...
阅读 3008·2023-04-26 03:01
阅读 3490·2023-04-25 19:54
阅读 1576·2021-11-24 09:39
阅读 1345·2021-11-19 09:40
阅读 4215·2021-10-14 09:43
阅读 2045·2019-08-30 15:56
阅读 1474·2019-08-30 13:52
阅读 1643·2019-08-29 13:05