使用EHCache需要注意的幾個問題(轉)

最近做一個小項目,需要對一批數據進行緩存,且要求持久化到磁盤。使用ehcache非常簡單和直觀,一般來說只需要配置ehcache.xml文件,接著直接使用@Cacheable, @Cacheput, @CacheEvict即可。

三個注解的意思也很簡單,這里就不說了。

?

ehchche.xml的配置非常簡單和直觀:

 1 <!--name:緩存名稱-->
 2     <!--maxElementsInMemory:緩存最大個數-->
 3     <!--eternal:緩存中對象是否為永久的,如果是,超時設置將被忽略,對象從不過期-->
 4     <!--timeToIdleSeconds:置對象在失效前的允許閑置時間(單位:秒),僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大-->
 5     <!--timeToLiveSeconds:緩存數據的生存時間(TTL),也就是一個元素從構建到消亡的最大時間間隔值,這只能在元素不是永久駐留時有效,如果該值是0就意味著元素可以停頓無窮長的時間-->
 6     <!--overflowToDisk:內存不足時,是否啟用磁盤緩存-->
 7     <!--maxElementsOnDisk:設置成0 表示硬盤中最大緩存對象數無限大-->
 8     <!--diskPersistent:設置成true表示緩存虛擬機重啟期數據磁盤存儲是否在虛擬機重啟后持續存在-->
 9     <cache name="appdsCache"
10            maxElementsInMemory="0"
11            eternal="true"
12            maxElementsOnDisk="10000000"
13            overflowToDisk="true"
14            diskPersistent="true"
15            memoryStoreEvictionPolicy="LRU">
16         <!--<persistence strategy="localRestartable" synchronousWrites="false"/>-->
17     </cache>

但是在使用過程中遇到了兩個小問題,下面簡單的做個記錄。

1. 在類中寫了一個帶有緩存注解的方法,然后在一個普通方法中調用了這個緩存函數,則緩存功能不再生效。如下:

@EnableCaching
class A implements IA{public String funA(){return funB();      }  @Cacheablepublic String funB(){...}
}

其實這和Spring的對象注入機制有關,例如,當外部通過@Autowired注解得到一個A類的對象時,其實得到的是一個spring包裝過的代理對象。

?

當調用a.funB()時,實際調用的是spring的proxy對象中的funB()方法,該方法內置了cache機制,在cache檢查后就會調用實際的a對象中的funA方法。

?

同理當調用a.funA()時,也是先調用spring的proxy對象中的funA()方法,經過檢查和資源分配等步驟后,會調用實際的a對象中的funA()方法,但是當在實際的A類對象中再調用funB()時,不會觸發cache機制,因為此時調用的不是SpringCacheProxy對象,而是一個實際的A類對象,所以不會觸發cache機制。

?

如果深入研究Spring完成注入和AOP編程實現的原理,可以發現動態代理是很重要的一個技術。目前Spring的動態代理主要是通過CGLib來實現的。

?

那么這個問題如何解決呢?有兩種思路:

(1) 拆分為兩個類來實現。即將funA()和funB()寫在兩個類中。

(2) 在類中注入自身實例。如下:

@EnableCaching
@Service(value="a")
class A implements IA{@Resource(name="a")private IA a; public String funA(){return a.funB();      }  @Cacheablepublic String funB(){...}}

第二種方法親測有效~~

不管怎樣,都要記住如下原則:同一個類中的注解方法互相調用時,注解機制可能是無效的

?

2. (在idea中點擊紅色按鈕關閉程序時) 持久化到磁盤的數據無法恢復。

原因如下:ehcache和其它緩存類似,需要flush或shutdown后才會持久化到磁盤

     會生成.data 的數據文件和 .index 的索引文件,方便重啟恢復。

     ??ehcache恢復數據是根據.index索引文件來進行數據恢復的。

     ??當程序再次啟動的時候,ehcache的一個方法會將.data文件和.index文件的修改時間進行比較,如果不符合直接將.index文件刪除。

?

一般來說,以下兩種情況,會自動調用shutdown()函數:

(1) 調用System.exit(),或最后一個非守護線程退出。

(2) 虛擬機停止運行。例如在命令行中執行CTRL+C,這會導致kill -SIGTERM pid 或kill -15 pid。

?

而在idea中點擊紅色按鈕時,屬于非正常關閉,導致shutdown()未能執行,猜測執行的是類似kill-9直接殺死進程的方法,而不是kill-15比較安全的關閉。

?

官網建議是最好是在程序關閉之前顯式地調用shutdown()函數,但是實際實踐中,就算是顯式調用了shutdown(),要是在程序運行到一半時點擊idea的紅色關閉按鈕,緩存還是會失效。。

在我看來最安全的方法就是把程序打成jar包運行,用CTRL+C在命令行終止程序,就算此時程序并沒有執行完,shutdown()也會執行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278845.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL的常見存儲引擎介紹與參數設置調優(轉載)

原文地址&#xff1a;http://www.cnblogs.com/demon89/p/8490229.htmlMySQL常用存儲引擎之MyISAM特性&#xff1a;1、并發性與鎖級別2、表損壞修復check table tablenamerepair table tablename3、MyISAM表支持的索引類型①、全文索引②、前綴索引4、MyISAM表支持數據壓縮myisa…

計算機網絡udp實驗時間戳請求報文與應答報文的表格填寫,自考計算機網絡管理歷年(2007.1-2013.1)試題及答案(標有頁碼)...

33.假設某RMON MONTIOR矩陣組的matrixSDTable和matrixDSTable的內容如下表1和表2所示。表1. matrixSDTbalematirxSDSourceAddress matrixSDDestAddress matrixSDPkts m,atrixSDOctests matrixSDError 008000AB1258 00A0C5BA9C02 1274 1697133 11 ……………表2. matrixDSTablem…

如何在Twitter上阻止令人討厭的“今日熱門新聞@yourname”垃圾郵件

Lately I’ve noticed an annoying trend on Twitter—people constantly spamming your replies feed with these posts saying that you were the top story on somebody’s feed. Very irritating, but here’s how to get rid of it. 最近&#xff0c;我注意到Twitter上有一…

蕾絲的選購和保養秘訣

維秘柔情內褲性感/舒適/健康/透氣 復制代碼 維秘柔情不僅僅是商品質材料和考究的設計&#xff0c;更是一個堅守生活美學的理念&#xff0c;總有一款維秘柔情告訴你的身體密碼。從此之前所用&#xff0c;皆為將就。從此之前所見&#xff0c;皆為平常。 在內褲不再是遮掩的這個時…

Python -bs4介紹

https://cuiqingcai.com/1319.html Python -BS4詳細介紹Python 在處理html方面有很多的優勢,一般情況下是要先學習正則表達式的.在應用過程中有很多模塊是非常方便的,先嘗試使用BeautifulSoup和Urllib進行網頁的處理,僅供學習.首先列舉所需要導入的模塊:from bs4 import Beauti…

廣東工業大學計算機學院書記,計算機學院召開2018年工作總結大會

單 位&#xff1a;計算機學院2019年1月8日上午&#xff0c;計算機學院在工學一號館216會議室召開了學年工作總結大會。會議由學院陳平華副院長主持。會上&#xff0c;郭維喜書記對過去一學年學院各項工作給予了肯定&#xff0c;并從黨的建設、意識形態工作、思想宣傳工作、師德…

Numpy的常用方法

NumPy是用Python進行科學計算的基本軟件包。它包含以下內容&#xff1a; 一個強大的N維數組對象復雜的&#xff08;廣播&#xff09;功能用于集成C / C 和Fortran代碼的工具有用的線性代數&#xff0c;傅里葉變換和隨機數能力除了明顯的科學用途外&#xff0c;NumPy還可以用作通…

vista任務欄透明_增加Windows Vista任務欄預覽大小的賞金(付費!)

vista任務欄透明Ever since Windows Vista came out, I’ve been trying to figure out how to increase the size of the tiny Windows Vista taskbar preview windows. I’ve scoured the registry, used process monitor to try and find hidden registry keys, and looked …

Netty原理分析

Netty是一個高性能、異步事件驅動的NIO框架&#xff0c;它提供了對TCP、UDP和文件傳輸的支持&#xff0c;作為一個異步NIO框架&#xff0c;Netty的所有IO操作都是異步非阻塞的&#xff0c;通過Future-Listener機制&#xff0c;用戶可以方便的主動獲取或者通過通知機制獲得IO操作…

福州大學計算機學院董晨老師,福州大學代表隊高分斬獲第三屆福建省高校網絡空間安全大賽冠軍...

新聞中心訊/10月27日&#xff0c;由福建省教育廳、福建省網絡與信息安全協調小組辦公室主辦的“百越杯”第三屆福建省高校網絡空間安全大賽在福州圓滿落幕&#xff0c;福州大學三支代表隊攬獲本屆大賽的冠軍暨特等獎、二等獎和三等獎。本次省賽福州大學派出的代表隊由數學與計算…

用uid分庫,uname上的查詢怎么辦?

2019獨角獸企業重金招聘Python工程師標準>>> 【緣起】 用戶中心是幾乎每一個公司必備的基礎服務&#xff0c;用戶注冊、登錄、信息查詢與修改都離不開用戶中心。 當數據量越來越大時&#xff0c;需要多用戶中心進行水平切分。最常見的水平切分方式&#xff0c;按照u…

python 新聞摘要_每日新聞摘要:運營商承諾他們不再出售您的位置…

python 新聞摘要Last year it was discovered that Verizon, Sprint, AT&T, and T-Mobile were all selling your real-time location data to third-party companies. They offered no oversight of what the companies did with the data whatsoever, and if that’s not…

Jquery中的this是什么類型

var city $("#city"); //這個city是dom還是jq if(city instanceof jQuery) alert(11); else alert(this.tagName); 總結&#xff1a; 1 如果是一個節點的某個事件…

計算機復試比重低的學校,又有985院校發布調劑信息,這個34所降低復試比重!...

原標題&#xff1a;又有985院校發布調劑信息&#xff0c;這個34所降低復試比重&#xff01;01985院校調劑01.清華大學昨天&#xff0c;清華大學發布一則調劑信息&#xff1a;臨床醫學交叉人才培養項目接受調劑。接收調劑專業如下&#xff1a;據其官網介紹&#xff0c;該項目為推…

Silverlight 解謎游戲 之四 粒子特效

前幾篇一直在Blend中工作沒體現出開發者的作用&#xff0c;本篇將為訂書器&#xff08;Stapler&#xff09;添加自定義粒子效果&#xff0c;當訂書器被點擊時產生更好的視覺效果。其中將使用到nerdplusart 的Silverlight Particle Generator 粒子特效工具。 在結束本章內容后&a…

CS229 1 .線性回歸與特征歸一化(feature scaling)

線性回歸是一種回歸分析技術&#xff0c;回歸分析本質上就是一個函數估計的問題&#xff08;函數估計包括參數估計和非參數估計&#xff09;&#xff0c;就是找出因變量和自變量之間的因果關系。回歸分析的因變量是應該是連續變量&#xff0c;若因變量為離散變量&#xff0c;則…

注冊表被黑客篡改 怎樣修復_使用快速注冊表黑客設置Office 2007配色方案

注冊表被黑客篡改 怎樣修復We’ve written previously about how to set the Office 2007 color scheme away from that awful default blue, but you can also set it with a quick registry hack or even via group policy on your network, so we’ll cover that here. 前面…

共享計算機后無法訪問磁盤,win10電腦共享硬盤無法訪問如何解決

很多用戶為了方便文件的傳輸和訪問&#xff0c;就會在局域網中開啟硬盤共享&#xff0c;正常是可以通過網絡打開訪問該用戶計算機的磁盤從而讀取數據文件&#xff0c;可是有win10系統用戶卻發現共享硬盤無法訪問&#xff0c;武大直接通過網絡打開對方的磁盤&#xff0c;該如何處…

mikadonic-iptables學習筆記

firewall圖像化配置[rootdesktop0 ~]# firewall-config iptabes -Fiptabes -Xiptabes -Z先設置默認規則&#xff08;最后防線&#xff09;[rootdesktop0 ~]# iptables -P INPUT DROP&&iptables -P OUTPUT DROP&&iptables -P FORWARD DROP iptables -A&#xf…

如何組合救援磁盤以創建最終Windows修復磁盤

We’ve covered loads of different anti-virus, Linux, and other boot disks that help you repair or recover your system, but why limit yourself to just one? Here’s how to combine your favorite repair disks together to create the ultimate repair toolkit for…