添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • ehcache 默认会在 classpath 下查找名为 ehcache.xml 的文件,当然也可以自定义名称。
  • 如果没有找到 ehcache.xml ,ehcache 会默认试用 ehcache-failsafe.xml ,它被打包在 ehcache 的 jar 文件中。如果用户使用的是这个文件,ehcache 会报一个 警告 ,让用户自己定义一个配置文件。
  • defaultCache 配置会被应用到所有没有被显示声明的缓存中。这个配置不是必需的。
  • 二、动态改变配置

  • 禁用 动态改变配置:
  • 在 XML 文件中把属性 dynamicConfig 设置为 false。
  • 在代码中禁用:
      Cache cache = manager.getCache("sampleCache");
      cache.disableDynamicFeatures();
          
  • timeToLive:一个 element 在缓存中存在的最长时间(秒),不论它是否被访问过都会被清除。
  • timeToIdle:一个 element 未被访问的最长时间(秒),经过这段时间后被清除。
  • maxEntriesLocalHeap
  • maxBytesLocalHeap
  • maxEntriesLocalDisk
  • maxBytesLocalDisk
      Cache cache = manager.getCache("sampleCache");
      CacheConfiguration config = cache.getCacheConfiguration();
      config.setTimeToIdleSeconds(60);
      config.setTimeToLiveSeconds(120);
      config.setmaxEntriesLocalHeap(10000);
      config.setmaxEntriesLocalDisk(1000000);
    

    三、传递拷贝而非引用

    默认情况下 get() 方法会取得缓存中数据的引用,之后对这个数据的所有改变都会立刻反映到缓存中。有些时候用户想要获得一个缓存数据的拷贝,对这个拷贝的操作不会影响到缓存。

  • XML 配置: 把 copyOnReadcopyOnWrite 设置为 true
  • <cache name="copyCache"
     maxEntriesLocalHeap="10"
     eternal="false"
     timeToIdleSeconds="5"
     timeToLiveSeconds="10"
     copyOnRead="true"
     copyOnWrite="true">
     <copyStrategy class="com.company.ehcache.MyCopyStrategy"/>
    </cache>
      
  • Java 代码中:
  • CacheConfiguration config = new CacheConfiguration("copyCache", 1000).copyOnRead(true).copyOnWrite(true);
    Cache copyCache = new Cache(config);
      
  • 实现接口 net.sf.ehcache.store.compound.CopyStrategy
  • XML 中配置 <copyStrategy class="com.company.ehcache.MyCopyStrategy"/>
  • Java 代码中:
    CacheConfiguration cacheConfiguration = new CacheConfiguration("copyCache", 10);
    CopyStrategyConfiguration copyStrategyConfiguration = new CopyStrategyConfiguration();
    copyStrategyConfiguration.setClass("com.company.ehcache.MyCopyStrategy");
    cacheConfiguration.addCopyStrategy(copyStrategyConfiguration);
          
  • 接受所有数据,无论有没有实现 Serializable
  • 线程安全
  • 如果数据量超过了存储最大值:(1)配置了溢出策略,数据可以被保存到其他层级;(2)没有配置,一部分数据被删除。
  • 内存回收策略:
  • LRU(最近最少使用):默认策略。缓存的时间戳离当前时间最远的将被回收。
  • LFU(最少被使用):缓存有一个 hit 值,值最小的被回收。
  • FIFO(先进先出)
  • 仅能存储实现了 Serializable 接口的数据。其他数据会抛出 NotSerializableException 异常。
  • 磁盘存储是可选的,不一定要配置;如果有多个 CacheManager,也没有必要配置多个磁盘存储路径。
  • 磁盘存储选项:
  • localTempSwap:允许缓存存放到磁盘,但重启之后这些数据就会丢失
  • localRestartable:重启之后数据不会丢失,会自动加载到内存中。
  •