摘要:今天就介紹一款常用的緩存框架。設(shè)置緩存中對象是否為永久的,如果是,超時設(shè)置將被忽略,對象從不過期。內(nèi)存不足時,是否啟用磁盤緩存。磁盤失效線程運行時間間隔,默認(rèn)是秒。
在當(dāng)今大數(shù)據(jù)爆發(fā)時代,數(shù)據(jù)量每天都呈“爆炸式”增長,頻繁的數(shù)據(jù)庫訪問無疑給數(shù)據(jù)庫帶來的極大負(fù)載,除了增大物理服務(wù)器的數(shù)量,我們也可以將一些常用的、公共的資源以cache形式放在客戶端或者靠近客戶端的服務(wù)器上,從而減少了服務(wù)器的負(fù)載,進一步也改善了系統(tǒng)的整體性能。今天就介紹一款常用的緩存框架---EhCache。什么是EhCache?
ehcache是現(xiàn)在最流行的純java開源框架,配置簡單,結(jié)構(gòu)清晰,功能強大,最初知道它,是從hibernate的緩存開始的。網(wǎng)上中文的ehcache材料以簡單的介紹和配置方法居多,如果你有這方面的問題,請自行看官網(wǎng)api文檔,但是很少見到特性說明和對實現(xiàn)原理的分析,因此在這這篇文章里面,我會詳細(xì)介紹和分析ehcache的特性,加上一些自己的理解和思考,希望對緩存感興趣的朋友有所收獲。EhCache入門教程
新建一個maven項目
在maven項目的pom.xml文件中添加對EhCache及Spring的依賴,如下所示:
4.0.0 com.imooc Ehcache 0.0.1-SNAPSHOT jar Ehcache http://maven.apache.org UTF-8 4.10 4.2.3.RELEASE net.sf.ehcache ehcache 2.10.2 junit junit ${junit.version} test org.springframework spring-test ${spring.version} test org.springframework spring-webmvc ${spring.version} org.springframework spring-core ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-context-support ${spring.version} aliyun aliyun http://maven.aliyun.com/nexus/content/groups/public
在src/main/resources目錄下創(chuàng)建ehcache的配置文件ehcache.xml,如下:
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
針對ehcache的配置文件的參數(shù)進行詳細(xì)說明:
diskStore : ehcache支持內(nèi)存和磁盤兩種存儲
path :指定磁盤存儲的位置
默認(rèn)cache參數(shù)配置說明:
defaultCache : 默認(rèn)的緩存
* maxEntriesLocalHeap=”10000” * eternal=”false” * timeToIdleSeconds=”120” * timeToLiveSeconds=”120” * maxEntriesLocalDisk=”10000000” * diskExpiryThreadIntervalSeconds=”120” * memoryStoreEvictionPolicy=”LRU”
cache :自定的緩存,當(dāng)自定的配置不滿足實際情況時可以通過自定義(可以包含多個cache節(jié)點)
* name : 緩存的名稱,可以通過指定名稱獲取指定的某個Cache對象 * maxElementsInMemory :內(nèi)存中允許存儲的最大的元素個數(shù),0代表無限個 * clearOnFlush:內(nèi)存數(shù)量最大時是否清除。 * eternal :設(shè)置緩存中對象是否為永久的,如果是,超時設(shè)置將被忽略,對象從不過期。根據(jù)存儲數(shù)據(jù)的不同,例如一些靜態(tài)不變的數(shù)據(jù)如省市區(qū)等可以設(shè)置為永不過時 * timeToIdleSeconds : 設(shè)置對象在失效前的允許閑置時間(單位:秒)。僅當(dāng)eternal=false對象不是永久有效時使用,可選屬性,默認(rèn)值是0,也就是可閑置時間無窮大。 * timeToLiveSeconds :緩存數(shù)據(jù)的生存時間(TTL),也就是一個元素從構(gòu)建到消亡的最大時間間隔值,這只能在元素不是永久駐留時有效,如果該值是0就意味著元素可以停頓無窮長的時間。 * overflowToDisk :內(nèi)存不足時,是否啟用磁盤緩存。 * maxEntriesLocalDisk:當(dāng)內(nèi)存中對象數(shù)量達(dá)到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。 * maxElementsOnDisk:硬盤最大緩存?zhèn)€數(shù)。 * diskSpoolBufferSizeMB:這個參數(shù)設(shè)置DiskStore(磁盤緩存)的緩存區(qū)大小。默認(rèn)是30MB。每個Cache都應(yīng)該有自己的一個緩沖區(qū)。 * diskPersistent:是否在VM重啟時存儲硬盤的緩存數(shù)據(jù)。默認(rèn)值是false。 * diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認(rèn)是120秒。
ehcache緩存的3種清空策略:
1 FIFO,先進先出
2 LFU,最少被使用,緩存的元素有一個hit屬性,hit值最小的將會被清出緩存。
3 LRU,最近最少使用的,緩存的元素有一個時間戳,當(dāng)緩存容量滿了,而又需要騰出地方來緩存新的元素的時候,那么現(xiàn)有緩存元素中時間戳離當(dāng)前時間最遠(yuǎn)的元素將被清出緩存。
編輯代碼測試Ehcache
package com.imooc.Ehcache;
import java.io.InputStream;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
/**
* 通過配置文件(ehcache.xml)來使用緩存 * @author Administrator
*/ public class EhCache2 { public static void main(String[] args) { //通過讀取ehcache配置文件來創(chuàng)建緩存管理器即CacheManager InputStream in = EhCache2.class.getClassLoader().getResourceAsStream("ehcache1.xml"); CacheManager cacheManager = CacheManager.create(in); // 創(chuàng)建一個緩存實例(在配置文件中獲取一個緩存實例) final Cache cache = cacheManager.getCache("helloworld1"); final String key = "greeting"; final String key1 = "greeting1"; //創(chuàng)建一個數(shù)據(jù)容器來存放我們所創(chuàng)建的element final Element putGreeting = new Element(key, "Hello, World!"); final Element putGreeting1 = new Element(key1, "Hello Ehcache"); //將數(shù)據(jù)放入到緩存實例中 cache.put(putGreeting); cache.put(putGreeting1); //取值 final Cache cache2 = cacheManager.getCache("helloworld1"); final Element getGreeting = cache2.get(key); final Element getGreeting1 = cache2.get(key1); // Print the value System.out.println("value======//========"+getGreeting.getObjectValue()); System.out.println("value1=====//========"+getGreeting1.getObjectKey()); } }
結(jié)果驗證,如果后臺輸出如下字段即在指定的cache存放文件夾找到創(chuàng)建的cache就說明我們打開了學(xué)習(xí)EhCache大門。
后臺輸出: value======//========Hello, World!
value1=====//========greeting1
最后附上本次實例的源碼:
鏈接:https://pan.baidu.com/s/1nu6rrz7 密碼:p5vw
Ehcache官方文檔下載鏈接:鏈接:https://pan.baidu.com/s/1cyg3Tk 密碼:0zf0
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68077.html
摘要:一級緩存值得注意的地方默認(rèn)就是支持一級緩存的,并不需要我們配置和整合后進行代理開發(fā),不支持一級緩存,和整合,按照的模板去生成代理對象,模板中在最后統(tǒng)一關(guān)閉。總結(jié)的一級緩存是級別的。 前言 本文主要講解Mybatis的以下知識點: Mybatis緩存 一級緩存 二級緩存 與Ehcache整合 Mapper代理 使用Mapper代理就不用寫實現(xiàn)類了 逆向工程 自動生成代碼 ...
摘要:添加用戶接口類簡單用戶鏈接數(shù)據(jù)庫微服務(wù)通過注解標(biāo)注該類為持久化操作對象。查找用戶數(shù)據(jù)保存用戶數(shù)據(jù)更新用戶數(shù)據(jù)刪除用戶數(shù)據(jù)這是清除緩存添加緩存配置緩存配置。對象是否永久有效,一但設(shè)置了,將不起作用。設(shè)置對象在失效前允許存活時間單位秒。 SpringCloud(第 045 篇)鏈接Mysql數(shù)據(jù)庫簡單的集成Mybatis、ehcache框架采用MapperXml訪問數(shù)據(jù)庫 - 一、大致介紹...
摘要:官網(wǎng)源碼推薦從開始手寫一個框架更多請在技術(shù)棧微信公眾號后臺回復(fù)關(guān)鍵字。是一個開放源代碼的對象關(guān)系映射框架,它對進行了非常輕量級的對象封裝,它將與數(shù)據(jù)庫表建立映射關(guān)系,是一個全自動的框架。 Java 程序員方向太多,且不說移動開發(fā)、大數(shù)據(jù)、區(qū)塊鏈、人工智能這些,大部分 Java 程序員都是 Java Web/后端開發(fā)。那作為一名 Java Web 開發(fā)程序員必須需要熟悉哪些框架呢? 今天...
摘要:前言如題,今天介紹的數(shù)據(jù)緩存。說明確實做了數(shù)據(jù)緩存,第二次的測試結(jié)果是從數(shù)據(jù)緩存中獲取的,并沒有直接查數(shù)據(jù)庫。為為的數(shù)據(jù)做了緩存插入數(shù)據(jù)返回的結(jié)果數(shù)據(jù)庫中的結(jié)果訪問結(jié)果如下圖。后語以上為數(shù)據(jù)緩存的教程。 微信公眾號:一個優(yōu)秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 的數(shù)據(jù)緩存。做過開發(fā)的都知道程序的瓶頸在于數(shù)據(jù)庫,我們也知道內(nèi)...
閱讀 3062·2023-04-26 03:01
閱讀 3548·2023-04-25 19:54
閱讀 1604·2021-11-24 09:39
閱讀 1384·2021-11-19 09:40
閱讀 4264·2021-10-14 09:43
閱讀 2100·2019-08-30 15:56
閱讀 1504·2019-08-30 13:52
閱讀 1669·2019-08-29 13:05