摘要:今天就介紹一款常用的緩存框架。設置緩存中對象是否為永久的,如果是,超時設置將被忽略,對象從不過期。內存不足時,是否啟用磁盤緩存。磁盤失效線程運行時間間隔,默認是秒。
在當今大數據爆發時代,數據量每天都呈“爆炸式”增長,頻繁的數據庫訪問無疑給數據庫帶來的極大負載,除了增大物理服務器的數量,我們也可以將一些常用的、公共的資源以cache形式放在客戶端或者靠近客戶端的服務器上,從而減少了服務器的負載,進一步也改善了系統的整體性能。今天就介紹一款常用的緩存框架---EhCache。什么是EhCache?
ehcache是現在最流行的純java開源框架,配置簡單,結構清晰,功能強大,最初知道它,是從hibernate的緩存開始的。網上中文的ehcache材料以簡單的介紹和配置方法居多,如果你有這方面的問題,請自行看官網api文檔,但是很少見到特性說明和對實現原理的分析,因此在這這篇文章里面,我會詳細介紹和分析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目錄下創建ehcache的配置文件ehcache.xml,如下:
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
針對ehcache的配置文件的參數進行詳細說明:
diskStore : ehcache支持內存和磁盤兩種存儲
path :指定磁盤存儲的位置
默認cache參數配置說明:
defaultCache : 默認的緩存
* maxEntriesLocalHeap=”10000” * eternal=”false” * timeToIdleSeconds=”120” * timeToLiveSeconds=”120” * maxEntriesLocalDisk=”10000000” * diskExpiryThreadIntervalSeconds=”120” * memoryStoreEvictionPolicy=”LRU”
cache :自定的緩存,當自定的配置不滿足實際情況時可以通過自定義(可以包含多個cache節點)
* name : 緩存的名稱,可以通過指定名稱獲取指定的某個Cache對象 * maxElementsInMemory :內存中允許存儲的最大的元素個數,0代表無限個 * clearOnFlush:內存數量最大時是否清除。 * eternal :設置緩存中對象是否為永久的,如果是,超時設置將被忽略,對象從不過期。根據存儲數據的不同,例如一些靜態不變的數據如省市區等可以設置為永不過時 * timeToIdleSeconds : 設置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。 * timeToLiveSeconds :緩存數據的生存時間(TTL),也就是一個元素從構建到消亡的最大時間間隔值,這只能在元素不是永久駐留時有效,如果該值是0就意味著元素可以停頓無窮長的時間。 * overflowToDisk :內存不足時,是否啟用磁盤緩存。 * maxEntriesLocalDisk:當內存中對象數量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。 * maxElementsOnDisk:硬盤最大緩存個數。 * diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區。 * diskPersistent:是否在VM重啟時存儲硬盤的緩存數據。默認值是false。 * diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。
ehcache緩存的3種清空策略:
1 FIFO,先進先出
2 LFU,最少被使用,緩存的元素有一個hit屬性,hit值最小的將會被清出緩存。
3 LRU,最近最少使用的,緩存的元素有一個時間戳,當緩存容量滿了,而又需要騰出地方來緩存新的元素的時候,那么現有緩存元素中時間戳離當前時間最遠的元素將被清出緩存。
編輯代碼測試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配置文件來創建緩存管理器即CacheManager InputStream in = EhCache2.class.getClassLoader().getResourceAsStream("ehcache1.xml"); CacheManager cacheManager = CacheManager.create(in); // 創建一個緩存實例(在配置文件中獲取一個緩存實例) final Cache cache = cacheManager.getCache("helloworld1"); final String key = "greeting"; final String key1 = "greeting1"; //創建一個數據容器來存放我們所創建的element final Element putGreeting = new Element(key, "Hello, World!"); final Element putGreeting1 = new Element(key1, "Hello Ehcache"); //將數據放入到緩存實例中 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()); } }
結果驗證,如果后臺輸出如下字段即在指定的cache存放文件夾找到創建的cache就說明我們打開了學習EhCache大門。
后臺輸出: value======//========Hello, World!
value1=====//========greeting1
最后附上本次實例的源碼:
鏈接:https://pan.baidu.com/s/1nu6rrz7 密碼:p5vw
Ehcache官方文檔下載鏈接:鏈接:https://pan.baidu.com/s/1cyg3Tk 密碼:0zf0
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68077.html
摘要:一級緩存值得注意的地方默認就是支持一級緩存的,并不需要我們配置和整合后進行代理開發,不支持一級緩存,和整合,按照的模板去生成代理對象,模板中在最后統一關閉。總結的一級緩存是級別的。 前言 本文主要講解Mybatis的以下知識點: Mybatis緩存 一級緩存 二級緩存 與Ehcache整合 Mapper代理 使用Mapper代理就不用寫實現類了 逆向工程 自動生成代碼 ...
摘要:添加用戶接口類簡單用戶鏈接數據庫微服務通過注解標注該類為持久化操作對象。查找用戶數據保存用戶數據更新用戶數據刪除用戶數據這是清除緩存添加緩存配置緩存配置。對象是否永久有效,一但設置了,將不起作用。設置對象在失效前允許存活時間單位秒。 SpringCloud(第 045 篇)鏈接Mysql數據庫簡單的集成Mybatis、ehcache框架采用MapperXml訪問數據庫 - 一、大致介紹...
摘要:官網源碼推薦從開始手寫一個框架更多請在技術棧微信公眾號后臺回復關鍵字。是一個開放源代碼的對象關系映射框架,它對進行了非常輕量級的對象封裝,它將與數據庫表建立映射關系,是一個全自動的框架。 Java 程序員方向太多,且不說移動開發、大數據、區塊鏈、人工智能這些,大部分 Java 程序員都是 Java Web/后端開發。那作為一名 Java Web 開發程序員必須需要熟悉哪些框架呢? 今天...
摘要:前言如題,今天介紹的數據緩存。說明確實做了數據緩存,第二次的測試結果是從數據緩存中獲取的,并沒有直接查數據庫。為為的數據做了緩存插入數據返回的結果數據庫中的結果訪問結果如下圖。后語以上為數據緩存的教程。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 的數據緩存。做過開發的都知道程序的瓶頸在于數據庫,我們也知道內...
閱讀 3035·2023-04-26 03:01
閱讀 3538·2023-04-25 19:54
閱讀 1592·2021-11-24 09:39
閱讀 1374·2021-11-19 09:40
閱讀 4250·2021-10-14 09:43
閱讀 2062·2019-08-30 15:56
閱讀 1490·2019-08-30 13:52
閱讀 1660·2019-08-29 13:05