必威体育Betway必威体育官网
当前位置:首页 > IT技术

Ehcache 3.x 快速使用

时间:2019-11-05 04:15:49来源:IT技术作者:seo实验室小编阅读:76次「手机版」
 

ehcache

Ehcache 3.X快速使用

简介

Ehcache 是一个开源的高性能缓存,拥有很高的拓展性和伸缩性,广泛使用各种 java 项目中(如 Hibernate 默认使用 Ehcache作为二级缓存),在目前基于 Java 的缓存方案里,几乎是性能最高的实现,目前新版本的 Ehcache 3.X 通过支持 Terracotta 改善了2.X 版本体验不佳的分布式缓存支持;

Ehcahe 3.X 和 Ehache 2.X 的 API 差异比较大,以下示例以 Ehcache 3.x 为主;

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

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

使用 Ehcache 需要导入依赖:org.ehcache:ehcache

如在 Gradle 中:

dependencies {

    compile 'org.ehcache:ehcache:3.4.0'

}

hello world

以下通过一个简单的示例,来演示 Ehcache 3.X 的基本使用,Ehcache支持2种配置方式:直接通过编码配置,通过XML配置;

直接编码配置

//构建一个缓存管理器,创建一个默认的缓存 "preconfigured"

CacheManager cacheManager = CacheManagerbuilder.newCacheManagerBuilder()

        .withCache("preConfigured",         //缓存别名

                CacheconfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,   

                        ResourcePoolsBuilder.heap(100))         //设置缓存堆容纳元素个数

                        .build())

        .build(true);               //创建之后立即初始化

//从缓存管理器中获取预定的缓存

Cache<Long, String> preConfigured

        = cacheManager.getCache("preConfigured", Long.class, String.class);

//直接从缓存管理器创建一个新的缓存

Cache<Long, String> myCache = cacheManager.createCache("myCache",

        CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,

                ResourcePoolsBuilder.heap(100)).build());

//向缓存里添加缓存键值

myCache.put(1L, "Hello World!");

//从指定缓存里获取键值

String value = myCache.get(1L);

cacheManager.close();

通过XML配置

在项目根目录创建XML配置文件:ehcache.xml

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

<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'

        xmlns='http://www.ehcache.org/v3'

        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">

    <!--缓存配置方式1:直接配置一个cache节点-->

    <!--完整配置一个缓存-->

    <cache alias="myCache1">

        <!--储存条目索引和储存值类型配置-->

        <key-type>java.lang.String</key-type>      <!--缓存条目索引-->

        <value-type>java.lang.String</value-type>  <!--缓存条目类型-->

         <!--储存层配置-->

         <resources>

            <heap unit="entries">2000</heap>       <!--配置堆储存-->

            <offheap unit="MB">20</offheap>        <!--配置堆外储存-->

         </resources>

    </cache>

    

    <!--缓存配置方式2:通过缓存模板配置cache节点-->

    <!--配置一个缓存模板-->

    <cache-template name="myDefault">

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

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

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

    </cache-template>

    <!--使用缓存模板配置缓存-->

    <cache alias="myCache2" uses-template="myDefault" />

    <cache alias="myCache3" uses-template="myDefault">

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

    </cache>

</config>

使用缓存代码

//从配置文件创建配置对象

Configuration xmlConf = new XmlConfiguration(getClass().getResource("/ehcache.xml"));

//创建缓存管理器

CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConf);

//从缓存管理器中获取缓存

Cache<Long,String> mycache1 = cacheManager.getCache("myCache1",Long.class,String.class);

//使用缓存

mycache1.put(1L,"Hello world!");

mycache1.get(1L);

//清空缓存,关闭缓存管理器

mycache1.clear();

cacheManager.close();

详细配置

以下是一份比较详细的 ehache 配置文件:

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

<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'

        xmlns='http://www.ehcache.org/v3'

        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">

    

    <!--配置硬盘持久化目录-->

    <persistence directory="usr/tmp/ehcache" />

    <!--完整配置一个缓存-->

    <cache alias="myCache1">

        <!--储存条目索引和储存值类型配置-->

        <key-type>java.lang.String</key-type>      <!--缓存条目索引-->

        <value-type>java.lang.String</value-type>  <!--缓存条目类型-->

        <!--缓存到期配置-->

        <expiry>

            <tti unit="minutes">2</tti>   <!--使用 TTI(time to idle) 策略-->

            <!--<ttl unit="minutes">30</ttl>  使用 TTL(time to leave)策略 -->

        </expiry>

        <!--储存层配置-->

        <resources>

            <heap unit="entries">2000</heap>       <!--配置堆储存-->

            <offheap unit="MB">20</offheap>        <!--配置堆外储存-->

            <disk unit="MB" persistent="true">500</disk>   <!--配置磁盘持久化储存-->

        </resources>

    </cache>

</config>

<cache>节点

在配置文件中,一个cache节代表一个缓存对象,需要设置 alias 别名属性,在代码中就是通过 CacheManager 对象获取相应的别名来获取相应的缓存对象的;

缓存条目是以 key-value 键值对的形式存在,需要通过<key-type><key-value>分别指定缓存键值对的索引和值,Ehcache 支持泛型类型的键值对类型;

缓存到期配置

echache 的缓存到期策略通过 cache 的<expiry> 子节点配置,默认支持以下3种缓存到期策略

  • tti:TTI(time to idle)策略,即固定空闲期策略,通过该节点的 unit 指定时间单位,节点值指定时间数值;

  • ttl:TTL(time to live)策略,即固定存活期策略;

  • none:不采用任何过期策略

储存层配置

echache 的缓存到期策略通过 cache 的<resources> 子节点配置,ehcache 的缓存储存主要分为以下3层:

  • heap:JVM byted-size 堆缓存,速度最快;

  • off-heap:JVM 对外内存,速度低于 heap,但是高于 disk;

  • disk:磁盘储存,速度最低,相对于 heap ,off-heap可以分配大量资源空间

这3层储存都可以相应的子节点进行配置,unit 指定数值单位,默认情况下为 entries ,即缓存数量;

如果需要配置磁盘持久化缓存,disk 节点需要设置 persistent 属性为 true,如果需要自定义磁盘持久化位置,可以在 config 节点下配置一个 persistence 节点;

线程池配置

在使用 ehcache 集群,常常会涉及到大量异步服务,需要配置缓存的线程池行为,详见 http://www.ehcache.org/documentation/3.4/thread-pools.html;

文章最后发布于: 2018-02-09 22:52:58

相关阅读

微笑挑战火爆的3点启示:如何打造有参与感的社会化营销?

导语:自从小米竖起了&ldquo;参与感&rdquo;的旗帜,&ldquo;参与感&rdquo;就成了各公司追求的目标。那么问题来了,怎么打造真正有&ldquo

190321 逆向-花指令去除(脚本)

Pizza的脚本中是通过get_bytes和patch_bytes两个API来将所有机器码读出然后再Patch回去的中间匹配pattern的过程是构造字符串然后

A5营销:301重定向完整解析(适合新手)

在优化网站的时候,301重定向是站长们必不可缺的一项优化,而301重定向主要用于将内容从一个位置移动到另外一个位置。其实,在理解上也

Axure教程:12306图片验证码的实现(随机可验证)

网上关于12306图片验证码的吐槽已经是铺天盖地,当然,现在的12306图片验证码已经不像以前那么变态了。不过鹏哥心里一直有个心结,纵使

从小米5G与华为Mate30发布会,看设计趋势

刚刚结束的小米5G发布会和华为Mate30发布会带给我很多震撼,不论是小米的环绕屏还是华为的曲面屏,都在暗示着交互设计上的一种趋势或

分享到:

栏目导航

推荐阅读

热门阅读