Ehcache

简介

ehcache 是一个纯Java的进程内缓存框架,具备快速、精干等特色,是Hibernate中默认的CacheProvider
它具备内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,支持REST和SOAP api等特色html

主要特性

  1. 快速、简单
  2. 多种缓存策略 提供LRU、LFU和FIFO缓存策略
  3. 缓存数据有两级:内存和磁盘,所以无需担忧容量问题
  4. 缓存数据会在虚拟机重启的过程当中写入磁盘
  5. 能够经过RMI、可插入API等方式进行分布式缓存
  6. 具备缓存和缓存管理器的侦听接口
  7. 提供Hibernate的缓存实现

使用介绍

架构图

  1. Cache Replication:这个模块主要负责缓存同步的几种实现,主要包括TerraCotta、RMI、JMS、JGroup四种方式
  2. In-process APIs:这个模块主要包括Ehcache对外经常使用的API
  3. Network APIs:这个模块主要包括的是Ehcache的通讯协议,主要有RESTful API、SOAP API、JMS API
  4. Ehcache Core:核心部分
  • CacheManager: 缓存管理器,能够经过单例或者多例的方式建立,也是Ehcache的入口类
  • Cache:每一个CacheManager能够管理多个Cache,每一个cache能够采用hash的方式管理多个Element
  • Element:用于存放真正的缓存内容

缓存数据过时策略

  • FIFO:根据数据的写入时间,数据先进先出
  • LFU:最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存
  • LRU:最近最少使用,缓存的元素有一个时间戳,当缓存容量满了,现有缓存元素中时间戳离当前时间最远的元素将被清出缓存
算法名称 存在的问题
LRU 会存在一次冷数据的批量查询而误淘汰大量热点的数据
LFU 会致使最近新加入的数据总会被很容易被剔除掉
FIFO 这种算法有其特殊的使用领域,好比在做业调度、消息队列等方面

基本使用方法

ehcache.xml算法

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
	updateCheck="true" name="shiroCache">

	<diskStore path="/data/html/ehcache/sh" /><!--达到内存上限后缓存文件保存位置-->

	<defaultCache maxElementsInMemory="10000" <!--cache 中最多能够存放的元素的数量-->
	    eternal="false"<!--是否永驻内存。若是值是true,cache中的元素将一直保存在内存中,不会由于时间超时而丢失,因此在这个值为true的时候,timeToIdleSeconds和timeToLiveSeconds两个属性的值就不起做用了-->
		timeToIdleSeconds="120"<!--访问这个cache中元素的最大间隔时间。若是超过这个时间没有访问这个cache中的某个元素,那么这个元素将被从cache中清除-->
		timeToLiveSeconds="86400"<!--cache中元素的生存时间。意思是从cache中的某个元素从建立到消亡的时间,从建立开始计时,当超过这个时间,这个元素将被从cache中清除-->
		overflowToDisk="true" <!--溢出是否写入磁盘-->
		diskSpoolBufferSizeMB="30"  <!--设置DiskStore(磁盘缓存)的缓存区大小,默认是30MB-->
		maxElementsOnDisk="10000000" <!--磁盘中最大元素数量 -->
		diskPersistent="false" <!--是否持久化磁盘缓存-->
		diskExpiryThreadIntervalSeconds="120" <!--磁盘缓存的清理线程运行间隔-->
		memoryStoreEvictionPolicy="LRU" <!--内存存储与释放策略-->  
		/>

	<cache name="fillSettleData" maxElementsInMemory="10000" eternal="false"
		   timeToIdleSeconds="30" timeToLiveSeconds="30" overflowToDisk="false" />

</ehcache>
复制代码

结合spring使用spring

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
		<property name="cacheManager" ref="cacheManagerFactory" />
	</bean>

	<cache:annotation-driven cache-manager="cacheManager" />

	<bean id="cacheManagerFactory"
		  class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
		<property name="configLocation" value="WEB-INF/env/ehcache.xml" />
		<property name="shared" value="true" />
	</bean>
复制代码
相关文章
相关标签/搜索