Ehcache緩存配置和基本使用

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="w3.org/2001/XMLSchema-i"

xsi:noNamespaceSchemaLocation="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的區別,都什麼時候使用?

TAG:Redis | Memcached | 緩存 |