ehcache入门实例

本文介绍了Ehcache——一种广泛使用的开源Java分布式缓存。文章涵盖了Ehcache的主要特性,包括其类层次模型、刷新策略及缓存清空策略,并详细解释了如何通过XML配置文件来定制缓存行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官网地址: http://ehcache.org/

一、简介:

Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序

ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。是Hibernate中默认的CacheProvider。

Ehcache的类层次模型主要为三层:

    CacheManager:操作Ehcache的入口;管理着多个Cache

    Cache:以一种类Hash的方式,关联着多个Elemenat

    Element:存放缓存内容

我们可以通过CacheManager.getInstance()获得一个单个的CacheManager,或者通过CacheManager的构造函数创建一个新的CacheManager。


ehcache的刷新策略

ehcache的刷新策略是当缓存在放入的时候记录一个放入时间,它是用Lazy Evict的方式,在取的时候同设置的TTL比较TTL比较。
ehcache缓存的3种清空策略
       FIFO,先进先出
      LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。
      LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

ehcache特性:

  1. 快速
  2. 简单
  3. 多种缓存策略
  4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  5. 缓存数据会在虚拟机重启的过程中写入磁盘
  6. 可以通过RMI、可插入API等方式进行分布式缓存
  7. 具有缓存和缓存管理器的侦听接口
  8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
  9. 提供Hibernate的缓存实现 

二、简单配置:

  pom中引入依赖:各版本依赖网址:http://www.mvnrepository.com/artifact/net.sf.ehcache/ehcache

   <dependency>

       <groupId>net.sf.ehcache</groupId>

      <artifactId>ehcache</artifactId>

      <version>2.10.2</version>

</dependency>

  ehcache.xml配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.     xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
  4.     updateCheck="false">
  5.     <diskStore path="java.io.tmpdir" />
  6.    <!--  默认缓存  -->
  7.     <defaultCache eternal="false" 
  8.                   maxElementsInMemory="1000"
  9.                   overflowToDisk="false" 
  10.                   diskPersistent="false" 
  11.                   timeToIdleSeconds="0"
  12.                   timeToLiveSeconds="600" 
  13.                   memoryStoreEvictionPolicy="LRU" />
  14.       <!--  菜单缓存,自定义缓存和定义多个cache  -->
  15.     <cache name="menuCache" 
  16.                   eternal="false" 
  17.                   maxElementsInMemory="200"
  18.                   overflowToDisk="false" 
  19.                   diskPersistent="false" 
  20.                   timeToIdleSeconds="300"
  21.                   timeToLiveSeconds="600" 
  22.                   memoryStoreEvictionPolicy="LRU" />
  23. </ehcache>  

                cache :自定义的缓存,可以包含多个cache节点

name : 缓存的名称,可以通过指定名称获取指定的某个Cache对象

maxElementsInMemory :内存中允许存储的最大的元素个数,0代表无限个

clearOnFlush:内存数量最大时是否清除。

eternal :设置缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。根据存储数据的不同,例如一些静态不变的数据如省市区等可以设置为永不过时

timeToIdleSeconds : 设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。

timeToLiveSeconds :缓存数据的生存时间(TTL),也就是一个元素从构建到消亡的最大时间间隔值,只能在eternal=false对象不是永久有效时使用,如果该值是0就意味着元素可以停顿无穷长的时间。

overflowToDisk :内存不足时,是否启用磁盘缓存。

maxEntriesLocalDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。

maxElementsOnDisk:硬盘最大缓存个数。

diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。

diskPersistent:是否在VM重启时存储硬盘的缓存数据。默认值是false。

diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。

三、获取配置对象:

   创建缓存管理器CacheManager

     1)默认配置

       CacheManager  cacheManager = CacheManager.create();

       CacheManager  cacheManager = CacheManager.newInstance();

    2)ehcache.xml配置

      CacheManager  cacheManager =  CacheManager.create("ehcache.xml") 

      CacheManager  cacheManager = CacheManager.newInstance("ehcache.xml");

       InputStream inputStream = new FileInputStream(new File("ehcache.xml"));

      CacheManager   cacheManager = CacheManager.newInstance(inputStream);

   创建缓存Cache

      Cache cache = cacheManager.getCache("menuCache");

  创建元素

      Element element = new Element("key", "value");

  将元素添加到缓存

      cache.put(element);

  获取缓存

      Element value = cache.get("key");

 删除元素

      cache.remove("key");

刷新缓存

      cache.flush();

关闭缓存管理器

     cacheManager.shutdown();

四、spring整合

 <!-- 启用缓存注解开关 -->

  1. <cache:annotation-driven cache-manager="cacheManager"/>
  2. <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
  3.           <property name="cacheManager" ref="ehcache"/>
  4. </bean>
  5. <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
  6.          <property name="configLocation" value="classpath:ehcache.xml"/>
  7. </bean>

注解使用:

  @Cacheable(value="menuCache", key ="#key")
    public List<Menu> getAllMenuByKey(String key) {
        return MenuMapper.getAllMenuByKey(key);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值