ehcache 是一個純Java的進程內緩存框架,具備快速、精幹等特色,是Hibernate中默認的CacheProvider
它具備內存和磁盤存儲,緩存加載器,緩存擴展,緩存異常處理程序,支持REST和SOAP api等特色html
算法名稱 | 存在的問題 |
---|---|
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>
複製代碼