① java幾種緩存技術介紹說明
1、TreeCache / JBossCache
JBossCache是一個復制的事務處理緩存,它允許你緩存企業級應用數據來更好的改善性能。緩存數據被自動復制,讓你輕松進行JBoss伺服器之間 的集群工作。JBossCache能夠通過JBoss應用服務或其他J2EE容器來運行一個MBean服務,當然,它也能獨立運行。
2、WhirlyCache
Whirlycache是一個快速的、可配置的、存在於內存中的對象的緩存。它能夠通過緩存對象來加快網站或應用程序的速度,否則就必須通過查詢資料庫或其他代價較高的處理程序來建立。
3、SwarmCache
SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個區域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。
4、JCache
JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。
5、ShiftOne
ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。
② ehcache java 對象緩存怎麼實現
EhCache裡面有一個CacheManager類型,它負責管理cache。Cache裡面存儲著Element對象,Element必須是key-value對。Cache是實際物理實現的,在內存中或者磁碟。這些組件的邏輯表示就是下面即將要討論的類。他們的方法提供了可編程的訪問方式。
CacheManager
負責Cache的創建、訪問、移除。
CacheManager創建
CacheManager支持兩種創建模式:單例(Singleton mode)和實例(InstanceMode)。
在2.5之前的版本中,在同一個JVM中允許存在任意數量相同名字的CacheManager。每調用new CacheManager(...)一次,就會產生一個新的CacheManager實例,而不管已經存在多少個。調用CacheManager.create(...),則返回的是已經存在的那個配置對應的單例CacheManager,如果不存在,則創建一個。
2.5之後的版本,不允許在同一個JVM內存在多個具有相同名字的CacheManager。創建非單例實例的CacheManager()構造函數可能會打破這一規則,但是會拋出NPE異常。如果你的代碼要在同一個JVM創建多個同名的實例,請使用靜態方法CacheManager.create(),總是返回對應名的CacheManager(如果已經存在),否則創建一個
③ 如何避免ehcache消耗內存過大
為了避免消耗內存過大建議Ehcache在diskstore模式下不要使用。
④ Java緩存問題 Ehcache 報錯,時間一長就報異常,讀資料庫是映射的資料庫表 高手進
第一個注釋掉,看是不是沖突,如果注釋掉第二個正常就是沖突,不是的話,就是路徑不對吧。
⑤ ehcache 如何緩存有條件的緩存
ehcache主要是對資料庫訪問的緩存,相同的查詢語句只需查詢一次資料庫,從而提高了查詢的速度
oscache 主要是對頁面的緩存,可以整頁或者指定網頁某一部分緩存,同時指定他的過期時間,這樣在此時間段裡面訪問的數據都是一樣的
hibernate2以前提倡用ehcache
hibernate3後提倡oscache,
⑥ SpringBoot緩存(Ehcache)
(3)如果我們想要自定 Ehcache 配置文件的名稱和位置,可以在 application.properties 中添加如下配置:
執行結果下如下:
可以看到第一次從DB查詢了數據,第二次則從緩存讀取,當更新DB數據時同時也更新了緩存數據,再次取數據仍然走緩存。
對於高頻數據,一般希望長時間緩存,對世兄於臨時數據,如驗證碼,token等,一般需要一個指旁配定的時間,到期則取消。
可以通過一個類去控制緩存的有效時運返指間,一般指定 timeToIdleSeconds=0 表示數據一直有效, timeToLiveSeconds=X秒 指定過期時間,如下:
然後在controller靈活的調用
對於無狀態的系統,可以方便的緩存token,驗證碼等短時有效的數據,方便存取。
⑦ java web項目里ehcache.xml是干什麼用的 我完全看不懂!
name:緩存名稱。
maxElementsInMemory:緩存最大個數。
eternal:對象是否永久有效,一但設置了,timeout將不起作用。
timeToIdleSeconds:設置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。
timeToLiveSeconds:設置對象在失效前允許存活時間(單位:秒)。最大時間介於創建時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。
overflowToDisk:當內存中對象數量達到maxElementsInMemory時,Ehcache將會對象寫到磁碟中。
diskSpoolBufferSizeMB:這個參數設置DiskStore(磁碟緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區。
maxElementsOnDisk:硬碟最大緩存個數。
diskPersistent:是否緩存虛擬機重啟期數據 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
:磁碟失效線程運行時間間隔,默認是120秒。
memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用)。
clearOnFlush:內存數量最大時是否清除。
⑧ Ehcache怎樣在Element級上控制過期時間
但是實際的情譽猜況是。ehcache依然能獲取到相關數據
當你去調用ehcacheput動作時,會調用;方法內容:if !elementisLifespanSet Element裡面有一個isLifespan的參數,默認是為false的。。
false的時候Ehcache會element的過期時間設置為默認配置的
當你通過new ElementObject key, Object value,
boolean eternal, int timeToIdleSeconds, int timeToLiveSeconds
去實例化的時候。。根本不會去設置isLifespan這個參數慶頃型,而是採用默認的過期策略的。。
但是去調用element 的。setTimeToLive,setTimeToIdle,setEternal方法時,
確會去設置這個參數。。
ElementsetEternalboolean eternal
這樣的話。。就會去單獨乎檔去設置Element控制過期時間,而不會用默認的配置去覆蓋設置
個人覺得這個ehcache存在的一個BUG。。
既然在調用element 的。setTimeToLive,setTimeToIdle,setEternal方法時,會去設置這個參數,那麼如果在構造的時候也應該調用這些方法。
而不應該應用到element級別上