激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring+EHcache緩存實例詳解

Spring+EHcache緩存實例詳解

2020-12-04 09:17liguangsunls Java教程

這篇文章主要為大家詳細(xì)介紹了Spring+EHcache緩存實例,EhCache是一個純Java的進(jìn)程內(nèi)緩存框架,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、ehcahe的介紹

EhCache 是一個純Java的進(jìn)程內(nèi)緩存框架,具有高速、精干等特點,是Hibernate中默認(rèn)的CacheProvider。Ehcache是一種廣泛使用的開源Java分布式緩存。

主要面向通用緩存,Java EE和輕量級容器。

它具有內(nèi)存和磁盤存儲。緩存載入器,緩存擴(kuò)展,緩存異常處理程序,一個gzip緩存servlet過濾器。支持REST和SOAP api等特點。

優(yōu)點:

1. 高速
2. 簡單
3. 多種緩存策略
4. 緩存數(shù)據(jù)有兩級:內(nèi)存和磁盤,因此無需操心容量問題
5. 緩存數(shù)據(jù)會在虛擬機(jī)重新啟動的過程中寫入磁盤
6. 能夠通過RMI、可插入API等方式進(jìn)行分布式緩存
7. 具有緩存和緩存管理器的偵聽接口
8. 支持多緩存管理器實例,以及一個實例的多個緩存區(qū)域
9. 提供Hibernate的緩存實現(xiàn)

缺點:

1. 使用磁盤Cache的時候很占用磁盤空間:這是由于DiskCache的算法簡單。該算法簡單也導(dǎo)致Cache的效率很高。它僅僅是對元素直接追加存儲。因此搜索元素的時候很的快。假設(shè)使用DiskCache的,在很頻繁的應(yīng)用中,很快磁盤會滿。
2. 不能保證數(shù)據(jù)的安全:當(dāng)突然kill掉java的時候,可能會產(chǎn)生沖突,EhCache的解決方法是假設(shè)文件沖突了。則重建cache。這對于Cache數(shù)據(jù)須要保存的時候可能不利。當(dāng)然,Cache僅僅是簡單的加速。而不能保證數(shù)據(jù)的安全。假設(shè)想保證數(shù)據(jù)的存儲安全,能夠使用Bekeley DB Java Edition版本號。

這是個嵌入式數(shù)據(jù)庫。能夠確保存儲安全和空間的利用率。

EhCache的分布式緩存有傳統(tǒng)的RMI,1.5版的JGroups,1.6版的JMS。分布式緩存主要解決集群環(huán)境中不同的server間的數(shù)據(jù)的同步問題。

使用Spring的AOP進(jìn)行整合,能夠靈活的對方法的返回結(jié)果對象進(jìn)行緩存。

以下將介紹Spring+EhCache具體實例。

二、具體實例解說

本實例的環(huán)境 eclipse + maven + spring + ehcache + junit

2.1、相關(guān)依賴pom.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.luo</groupId>
 <artifactId>ehcache_project</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <properties>
  <!-- spring版本號號 -->
  <spring.version>3.2.8.RELEASE</spring.version>
  <!-- junit版本號號 -->
  <junit.version>4.10</junit.version>
 </properties>
 
 <dependencies>
  <!-- 加入Spring依賴 -->
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context-support</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aop</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aspects</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-tx</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-jdbc</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>${spring.version}</version>
  </dependency>
 
  <!--單元測試依賴 -->
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>${junit.version}</version>
   <scope>test</scope>
  </dependency>
 
  <!--spring單元測試依賴 -->
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-test</artifactId>
   <version>${spring.version}</version>
   <scope>test</scope>
  </dependency>
 
  <!-- ehcache 相關(guān)依賴 -->
  <dependency>
   <groupId>net.sf.ehcache</groupId>
   <artifactId>ehcache</artifactId>
   <version>2.8.2</version>
  </dependency>
 </dependencies>
</project>

2.2、加入ehcache配置文件ehcache-setting.xml

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
 <!-- 指定一個文件文件夾,當(dāng)EhCache把數(shù)據(jù)寫到硬盤上時。將把數(shù)據(jù)寫到這個文件文件夾下 -->
 <diskStore path="java.io.tmpdir"/>
 
 <!-- 設(shè)定緩存的默認(rèn)數(shù)據(jù)過期策略 -->
 <defaultCache
   maxElementsInMemory="10000"
   eternal="false"
   overflowToDisk="true"
   timeToIdleSeconds="10"
   timeToLiveSeconds="20"
   diskPersistent="false"
   diskExpiryThreadIntervalSeconds="120"/>
 
 <cache name="cacheTest"
  maxElementsInMemory="1000"
  eternal="false"
  overflowToDisk="true"
  timeToIdleSeconds="10"
  timeToLiveSeconds="20"/>
 
</ehcache>

這里我們配置了cacheTest策略,10秒過期。

cache元素的屬性:

name:緩存名稱

maxElementsInMemory:內(nèi)存中最大緩存對象數(shù)

maxElementsOnDisk:硬盤中最大緩存對象數(shù)。若是0表示無窮大

eternal:true表示對象永只是期,此時會忽略timeToIdleSeconds和timeToLiveSeconds屬性。默覺得false

overflowToDisk:true表示當(dāng)內(nèi)存緩存的對象數(shù)目達(dá)到了

maxElementsInMemory界限后。會把溢出的對象寫到硬盤緩存中。注意:假設(shè)緩存的對象要寫入到硬盤中的話。則該對象必須實現(xiàn)了Serializable接口才行。

diskSpoolBufferSizeMB:磁盤緩存區(qū)大小,默覺得30MB。

每一個Cache都應(yīng)該有自己的一個緩存區(qū)。

diskPersistent:是否緩存虛擬機(jī)重新啟動期數(shù)據(jù)。是否持久化磁盤緩存,當(dāng)這個屬性的值為true時,系統(tǒng)在初始化時會在磁盤中查找文件名稱為cache名稱,后綴名為index的文件,這個文件里存放了已經(jīng)持久化在磁盤中的cache的index,找到后會把cache載入到內(nèi)存,要想把cache真正持久化到磁盤,敲代碼時注意執(zhí)行net.sf.ehcache.Cache.put(Element element)后要調(diào)用flush()方法。

diskExpiryThreadIntervalSeconds:磁盤失效線程執(zhí)行時間間隔。默覺得120秒

timeToIdleSeconds: 設(shè)定同意對象處于空暇狀態(tài)的最長時間,以秒為單位。當(dāng)對象自從近期一次被訪問后,假設(shè)處于空暇狀態(tài)的時間超過了timeToIdleSeconds屬性值,這個對象就會過期,EHCache將把它從緩存中清空。僅僅有當(dāng)eternal屬性為false,該屬性才有效。假設(shè)該屬性值為0,則表示對象能夠無限期地處于空暇狀態(tài)

timeToLiveSeconds:設(shè)定對象同意存在于緩存中的最長時間,以秒為單位。

當(dāng)對象自從被存放到緩存中后,假設(shè)處于緩存中的時間超過了 timeToLiveSeconds屬性值,這個對象就會過期。EHCache將把它從緩存中清除。

僅僅有當(dāng)eternal屬性為false,該屬性才有效。

假設(shè)該屬性值為0,則表示對象能夠無限期地存在于緩存中。

timeToLiveSeconds必須大于timeToIdleSeconds屬性,才有意義

memoryStoreEvictionPolicy:當(dāng)達(dá)到maxElementsInMemory限制時。Ehcache將會依據(jù)指定的策略去清理內(nèi)存。可選策略有:LRU(近期最少使用,默認(rèn)策略)、FIFO(先進(jìn)先出)、LFU(最少訪問次數(shù))。

2.3、spring配置文件application.xml

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:cache="http://www.springframework.org/schema/cache"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/cache
   http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
 
 <!-- 自己主動掃描注解的bean -->
 <context:component-scan base-package="com.luo.service" />
 
 <cache:annotation-driven cache-manager="cacheManager" />
 
 <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
  <property name="cacheManager" ref="ehcache"></property>
 </bean>
 
 <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
  <property name="configLocation" value="classpath:ehcache-setting.xml"></property>
 </bean>
 
</beans>

2.4、EhCacheTestService接口

 
?
1
 
2
3
4
5
package com.luo.service;
 
public interface EhCacheTestService {
 public String getTimestamp(String param);
}

2.5、EhCacheTestService接口實現(xiàn)

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.luo.service.impl;
 
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.luo.service.EhCacheTestService;
 
@Service
public class EhCacheTestServiceImpl implements EhCacheTestService {
 
 @Cacheable(value="cacheTest",key="#param")
 public String getTimestamp(String param) {
  Long timestamp = System.currentTimeMillis();
  return timestamp.toString();
 }
 
}

這里注解中value=”cacheTest”與ehcache-setting.xml中的cache名稱屬性值一致。

2.6、單元測試類

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.luo.baseTest;
 
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
//指定bean注入的配置文件
@ContextConfiguration(locations = { "classpath:application.xml" })
//使用標(biāo)準(zhǔn)的JUnit @RunWith凝視來告訴JUnit使用Spring TestRunner
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringTestCase extends AbstractJUnit4SpringContextTests {
 
}
 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.luo.service;
 
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
 
import com.luo.baseTest.SpringTestCase;
 
public class EhCacheTestServiceTest extends SpringTestCase {
 
 @Autowired
 private EhCacheTestService ehCacheTestService;
 
 @Test
 public void getTimestampTest() throws InterruptedException{
  System.out.println("第一次調(diào)用:" + ehCacheTestService.getTimestamp("param"));
  Thread.sleep(2000);
  System.out.println("2秒之后調(diào)用:" + ehCacheTestService.getTimestamp("param"));
  Thread.sleep(11000);
  System.out.println("再過11秒之后調(diào)用:" + ehCacheTestService.getTimestamp("param"));
 }
}

2.7、執(zhí)行結(jié)果

Spring+EHcache緩存實例詳解

三、工程源代碼下載

下載:Spring EHcache緩存實例

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 精品一区二区三区日本 | 在线观看91精品 | 逼片视频 | 久久久精品视频国产 | 国产视频在线一区 | 天天都色视频 | 91久久久久 | 国产毛片网站 | 久久免费看毛片 | 色婷婷综合久久久中文一区二区 | 久久精品视频12 | 免费a级毛片大学生免费观看 | 91av亚洲 | 91成人在线免费视频 | 毛片网站视频 | 羞羞答答www网站进入 | 羞羞的视频在线 | 激情网站免费观看 | 久久久精品视频国产 | 九色中文| 国产免费激情视频 | 亚洲爱爱网站 | 九九热视频免费 | 性生活视频网站 | 色淫视频 | 男男羞羞视频网站国产 | 91短视频在线视频 | 色视频91| 中文字幕国 | 国产宾馆3p国语对白 | 一级做a爱片久久 | 欧美日韩专区国产精品 | 国产1区视频 | 爽爽视频免费看 | 欧美一级做性受免费大片免费 | 日日爱影院 | 在线日韩av电影 | 国产精品免费一区二区三区都可以 | 国产精品久久久久久久久久久久久久久 | 亚洲天堂在线电影 | 久久综合给合久久狠狠狠97色69 |