Ehcache緩存配置和基本使用
在java項目廣泛的使用。它是一個開源的、設計於提高在數據從RDBMS中取出來的高花費、高延遲採取的一種緩存方案。正因為Ehcache具有健壯性(基於java開發)、被認證(具有apache 2.0 license)、充滿特色(稍後會詳細介紹),所以被用於大型複雜分散式web application的各個節點中。
- 夠快Ehcache的發行有一段時長了,經過幾年的努力和不計其數的性能測試,Ehcache終被設計於large, high concurrency systems.
- 夠簡單開發者提供的介面非常簡單明了,從Ehcache的搭建到運用運行僅僅需要的是你寶貴的幾分鐘。其實很多開發者都不知道自己用在用Ehcache,Ehcache被廣泛的運用於其他的開源項目比如:hibernate
- 夠袖珍
關於這點的特性,官方給了一個很可愛的名字small foot print ,一般Ehcache的發布版本不會到2M,V 2.2.3 才 668KB。
- 夠輕量核心程序僅僅依賴slf4j這一個包,沒有之一!
- 好擴展Ehcache提供了對大數據的內存和硬碟的存儲,最近版本允許多實例、保存對象高靈活性、提供LRU、LFU、FIFO淘汰演算法,基礎屬性支持熱配置、支持的插件多
- 監聽器緩存管理器監聽器 (CacheManagerListener)和 緩存監聽器(CacheEvenListener),做一些統計或數據一致性廣播挺好用的如何使用?
POM文件
<!--加入緩存-->
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.6</version> </dependency>
配置文件
在resources資源目錄下創建一個ehcache-config.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="false"> <!-- EhCache在每次啟動的時候都要連接到 ehcache 網站上去檢查新版本 使用如上的 updateCheck="false" 來禁止這個檢查新版本 --> <!-- name:cache唯一標識 eternal:緩存是否永久有效 maxElementsInMemory:內存中最大緩存對象數overflowToDisk(true,false):緩存對象達到最大數後,將緩存寫到硬碟中
diskPersistent:硬碟持久化 timeToIdleSeconds:緩存清除時間 timeToLiveSeconds:緩存存活時間 diskExpiryThreadIntervalSeconds:磁碟緩存的清理線程運行間隔 memoryStoreEvictionPolicy:緩存清空策略 1.FIFO:first in first out 先講先出 2.LFU: Less Frequently Used 一直以來最少被使用的 3.LRU:Least Recently Used 最近最少使用的 --><diskStore path="java.io.tmpdir/ehcache" /> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="FIFO" /> <!-- 緩存 --> <cache name="cache_mall_keys" maxElementsInMemory="200" eternal="false" timeToIdleSeconds="7200" timeToLiveSeconds="7200"overflowToDisk="true"
maxElementsOnDisk="1000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="FIFO" /> <!-- 緩存 --> <cache name="cache_pos_codes" maxElementsInMemory="200" eternal="false"timeToIdleSeconds="43200"
timeToLiveSeconds="43200" overflowToDisk="true" maxElementsOnDisk="1000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="FIFO" /> </ehcache>
Spirng整合配置
注意一下內容必須註冊在Spring的主配置文件中
<!--緩存配置文件介面-->
<cache:annotation-driven cache-manager="cacheManager"/>
<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache-config.xml"></property> </bean> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="cacheManagerFactory"></property> </bean>
使用方法
這裡可以使用註解的方式 @Cacheable(value = 「cache_pos_codes」) 其中value的是設置的配置文件ehcache-config.xml的配置名稱。需要注意的是 import org.springframework.cache.annotation.Cacheable;
@RequestMapping(value = "/date",method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE + CHARSET)
@ResponseBody @Cacheable(value = "cache_pos_codes")public String getDate(){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return simpleDateFormat.format(new Date()); }
推薦閱讀:
※Spring如何與redis進行整合開發?
※Redis的介紹以及安裝啟動
※redis cluster及codis之間該如何選擇?
※Redis存儲遷移方案
※redis和Memcached的區別,都什麼時候使用?