zoukankan      html  css  js  c++  java
  • Ehcache3.x学习(一)入门

     

    简介

    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
     

    勿在浮沙筑高台 ——个人浅见,难免有误导之处,麻烦请指出。
  • 相关阅读:
    Axure高保真开关交互效果
    Axure工具栏展开关闭交互效果
    Axure跑马灯交互效果
    for循环实现百钱买百鸡的问题: 公鸡5元一只,母鸡3元一只,小鸡1元3只,100元要买100只鸡?有多少买法?
    git的几种撤销提交方式
    react父子组件之间传值
    pm2 常用命令
    Dva.js 入门级教学文档-2
    Dva.js 入门级教学文档-1
    深入理解call函数
  • 原文地址:https://www.cnblogs.com/liufeichn/p/11961657.html
Copyright © 2011-2022 走看看