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>
複製代碼
相關文章
相關標籤/搜索