关于EHcache缓存

2024-05-30 09:58
文章标签 缓存 ehcache

本文主要是介绍关于EHcache缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

1、简介

非常简单,而且易用。

    ehcache 是一个非常轻量级的缓存实现,而且从1.2 之后就支持了集群,而且是hibernate 默认的缓存provider。ehcache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。

ehcache可以直接使用。也可以和Hibernate对象/关系框架结合使用。还可以做Servlet缓存。

Cache 存储方式 :内存或磁盘。

官方网站:http://ehcache.sourceforge.net/

主要特征:

1. 快速.

2. 简单.

3. 多种缓存策略

4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题

5. 缓存数据会在虚拟机重启的过程中写入磁盘

6. 可以通过RMI、可插入API等方式进行分布式缓存

7. 具有缓存和缓存管理器的侦听接口

8. 支持多缓存管理器实例,以及一个实例的多个缓存区域

9. 提供Hibernate的缓存实现

10. 等等

二、快速上手

1、  项目类库中添加ehcache.jar;

2、  在类路径下编写ehcache.xml配置文件。

三、配置文件参数详解

ehcache.xml是ehcache的配置文件,并且存放在应用的classpath中。下面是对该XML文件中的一些元素及其属性的相关说明: 

<diskStore>元素:指定一个文件目录,当EHCache把数据写到硬盘上时,将把数据写到这个文件目录下。 下面的参数这样解释:   

         user.home – 用户主目录  

         user.dir     – 用户当前工作目录   

         java.io.tmpdir – 默认临时文件路径

<defaultCache>元素:设定缓存的默认数据过期策略。 

<cache>元素:设定具体的命名缓存的数据过期策略。

<cache>元素的属性 

        name:缓存名称。通常为缓存对象的类名(非严格标准)。 

        maxElementsInMemory:设置基于内存的缓存可存放对象的最大数目。 

        maxElementsOnDisk:设置基于硬盘的缓存可存放对象的最大数目。 

        eternal:如果为true,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false; 

        timeToIdleSeconds: 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期。当对象过期,EHCache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态。 

        timeToLiveSeconds:设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds属性值,这个对象就会过期。当对象过期,EHCache将把它从缓存中清除。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地存在于缓存中。timeToLiveSeconds必须大于timeToIdleSeconds属性,才有意义。 

        overflowToDisk:如果为true,表示当基于内存的缓存中的对象数目达到了maxElementsInMemory界限后,会把益出的对象写到基于硬盘的缓存中。注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了Serializable接口才行。

memoryStoreEvictionPolicy:缓存对象清除策略。有三种:

        1 FIFO,firstin first out ,这个是大家最熟的,先进先出,不多讲了

        2 LFU , LessFrequently Used ,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。

        2 LRU ,LeastRecently Used ,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

 

四、单独使用EHCache

1.创建CacheManager (net.sf.ehcache.CacheManager)

1)使用默认配置文件创建

1

CacheManager manager = CacheManager.create();

(2)使用指定配置文件创建

1

CacheManager manager = CacheManager.create("src/config/ehcache.xml");

(3)从classpath找寻配置文件并创建

1

URL url = getClass().getResource("/anothername.xml");

2

CacheManager manager = CacheManager.create(url);

(4)通过输入流创建

1

InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());

2

try { 

 

3

    manager = CacheManager.create(fis);

4

 } finally { 

 

5

    fis.close(); 

6

}

2.创建Caches (net.sf.ehcache.Cache)

1)取得配置文件中预先定义的sampleCache1设置,生成一个Cache

1

Cache cache = manager.getCache("sampleCache1");

2)设置一个名为test 的新cache,test属性为默认

1

CacheManager manager = CacheManager.create();

2

manager.addCache("test");

3)设置一个名为test 的新cache,并定义其属性

1

CacheManager manager = CacheManager.create();

2

Cache cache = new Cache("test", 1, true, false, 5, 2);

 

3

manager.addCache(cache);

4)删除cache

1

CacheManager singletonManager = CacheManager.create();

2

singletonManager.removeCache("sampleCache1");

3.使用Caches

1)往cache中加入元素

1

Element element = new Element("key1", "value1");

2

cache.put(new Element(element);

2)从cache中取得元素

1

Element element = cache.get("key1");

3)从cache中删除元素

1

Cache cache = manager.getCache("sampleCache1");

2

Element element = new Element("key1", "value1");

 

3

cache.remove("key1");

4.卸载CacheManager ,关闭Cache

1

 manager.shutdown();

下附代码。

五、在 Hibernate 中运用EHCache

1、hibernate.cfg.xml中需设置如下:

3系列版本加入

1

<property name=” hibernate.cache.provider_class”>

2

    org.hibernate.cache.EhCacheProvider

 

3

</property>

EhCacheProvider类位于hibernate3.jar

2.1版本加入

net.sf.ehcache.hibernate.Provider

2.1以下版本加入

net.sf.hibernate.cache.EhCache

 2、在Hibernate3.x中的etc目录下有ehcache.xml的示范文件,将其复制应用程序的src目录下(编译时会把ehcache.xml复制到WEB-INF/classess目录下),对其中的相关值进行更改以和自己的程序相适合。

 3、持久化类的映射文件进行配置

1

<cache usage="read-write"/>

在<set>标记中设置了<cacheusage="read-write"/>,但Hibernate仅把和Group相关的Student的主键id加入到缓存中,如果希望把整个Student的散装属性都加入到二级缓存中,还需要在Student.hbm.xml文件的<class>标记中加入<cache>子标记,如下所示:

1

<cache usage="read-write" /> <!--cache标记需跟在class标记后-->

 注:SSH中hibernate配置的cache信息

1

<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>

 

 

 

 

 

 

 

配置文件demo如下:

<?xml version="1.0"encoding="UTF-8" standalone="yes"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="ehcache.xsd">

    <!--Sets the path to the directory where cache .data files are created.

 

         If the path is a Java System Propertyit is replaced by

         its value in the running VM.

 

         The following properties aretranslated:

         user.home - User's home directory

         user.dir - User's current workingdirectory

         java.io.tmpdir - Default tempfile path -->

    <diskStore path="java.io.tmpdir"/>

    <!-- 

    <cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"properties="jgroups_tcp.xml"/>

    -->

    <!--DefaultCache configuration. These will applied to caches programmaticallycreated through

        the CacheManager.

 

        The following attributes are required:

 

        maxInMemory                    - Sets the maximum numberof objects that will be created in memory

        eternal                        - Sets whether elementsare eternal. If eternal,  timeouts areignored and the

                                        element is never expired.

        overflowToDisk                 - Sets whether elements canoverflow to disk when the in-memory cache

                                         has reached the maxInMemory limit.

 

        The following attributes are optional:

        timeToIdleSeconds              - Sets the time to idle for anelement before it expires.

                                         i.e.The maximum amount of time between accesses before an element expires

                                         Isonly used if the element is not eternal.

                                        Optional attribute. A value of 0 means that an Element can idle forinfinity.

                                         The defaultvalue is 0.

        timeToLiveSeconds              - Sets the time to live for anelement before it expires.

                                         i.e.The maximum time between creation time and when an element expires.

                                         Isonly used if the element is not eternal.

                                        Optional attribute. A value of 0 means that and Element can live forinfinity.

                                         The default value is 0.

        diskPersistent                 - Whether the disk storepersists between restarts of the Virtual Machine.

                                         Thedefault value is false.

        diskExpiryThreadIntervalSeconds- Thenumber of seconds between runs of the disk expiry thread. The defaultvalue

                                         is 120seconds.

        -->

 

    <defaultCache

       maxElementsInMemory="10000"

       eternal="false"

       timeToIdleSeconds="1800"

        timeToLiveSeconds="1800"

       overflowToDisk="false"       

    />

    <cache name="org.hibernate.cache.StandardQueryCache"

       maxElementsInMemory="10000"

       eternal="false"

       timeToIdleSeconds="1800"

       timeToLiveSeconds="1800"

       overflowToDisk="false"

    />

    <cache name="tinyCacheSet"

       maxElementsInMemory="10000"

       eternal="false"

       timeToIdleSeconds="604800"

       timeToLiveSeconds="1800"

       overflowToDisk="false"

    />  

    <cache name="readOnlyCacheSet"

       maxElementsInMemory="10000"

       eternal="false"

       timeToIdleSeconds="604800"

       timeToLiveSeconds="1800"

       overflowToDisk="false"

    />  

    <cache name="mediumCacheSet"

       maxElementsInMemory="10000"

       eternal="false"

       timeToIdleSeconds="604800"

       timeToLiveSeconds="1800"

       overflowToDisk="false"

    /> 

    <cache name="largeCacheSet"

       maxElementsInMemory="20000"

       eternal="false"

       timeToIdleSeconds="604800"

       timeToLiveSeconds="1800"

       overflowToDisk="false"

    /> 

    <cache name="hugeCacheSet" 

       maxElementsInMemory="50000"

       eternal="false"

       timeToIdleSeconds="604800"

       timeToLiveSeconds="1800"

       overflowToDisk="false"

    />

</ehcache>

这篇关于关于EHcache缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016099

相关文章

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

PyCharm如何更改缓存位置

《PyCharm如何更改缓存位置》:本文主要介绍PyCharm如何更改缓存位置的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm更改缓存位置1.打开PyCharm的安装编程目录2.将config、sjsystem、plugins和log的路径

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓