內存緩存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,就像一個輕量級的配置緩存工作狀態的框架。
㈡ 哪位了解java數據緩存技術有哪些
一、什麼是緩存
1、Cache是高速緩沖存儲器 一種特殊的存儲器子系統,其中復制了頻繁使用的數據以利於快速訪問
2、凡是位於速度相差較大的兩種硬體/軟體之間的,用於協調兩者數據傳輸速度差異的結構,均可稱之為 Cache
常見的緩存技術有哪些?
一、操作系統緩存
1、文件系統提供的Disk Cache:操作系統會把經常訪問到的文件內容放入到內存當中,由文件系統來管理
2、當應用程序通過文件系統訪問磁碟文件的時候,操作系統從Disk Cache當中讀取文件內容,加速了文件讀取速度
3、Disk Cache由操作系統來自動管理,一般不用人工干預,但應當保證物理內存充足,以便於操作系統可以使用盡量多的內存充當Disk Cache,加速文件讀取速度
4、特殊的應用程序對文件系統Disk Cache有很高的要求,會繞開文件系統Disk Cache,直接訪問磁碟分區,自己實現Disk
5、Cache策略
Oracle的raw device(裸設備) – 直接拋棄文件系統
MySQL的InnoDB: innodb_flush_method = O_DIRECT
二、資料庫緩存
緩存策略:a、Query Cache;b、Data Buffer
三、應用程序緩存
包括對象緩存、查詢緩存、頁面緩存
四、web伺服器端緩存
基於代理伺服器模式的Web伺服器端緩存,如squid/nginx
Web伺服器緩存技術被用來實現CDN(內容分發網路 content delivery network)
被國內主流門戶網站大量採用
不需要編程,但僅限於新聞發布類網站,頁面實時性要求不高
五、基於ajax的瀏覽器緩存
使用AJAX調用的時候,將資料庫在瀏覽器端緩存
只要不離開當前頁面,不刷新當前頁面,就可以直接讀取緩存數據
只適用於使用AJAX技術的頁面
㈢ JAVA中的緩存是怎麼一回事幫忙解釋下。急急急!!!!!!謝謝
緩存是一種存儲方式,他是在計算機的內存中的,在java中I/O中有緩沖流,他們是將數據存到了,緩存中,只是為了,在讀寫數據的時候加快速度,當緩存滿了之後將其寫入到你指定位置,如果想隨時寫入的話就用,flush()方法,或者在最後關閉掉流也是可以的。
㈣ 什麼是Java緩存技術Cache
java緩存技術
一、什麼是緩存
1、Cache是高速緩沖存儲器 一種特殊的存儲器子系統,其中復制了頻繁使用的數據以利於快速訪問
2、凡是位於速度相差較大的兩種硬體/軟體之間的,用於協調兩者數據傳輸速度差異的結構,均可稱之為 Cache
二、緩存的分類
1、基於web應用的系統架構圖
2、在系統架構的不同層級之間,為了加快訪問速度,都可以存在緩存
操作系統磁碟緩存->減少磁碟機械操作
資料庫緩存->減少文件系統I/O
應用程序緩存->減少對資料庫的查詢
Web伺服器緩存->減少應用伺服器請求
客戶端瀏覽器緩存->減少對網站的訪問。
㈤ 請問:怎樣清除java的緩存!
通常關閉JAVA程序,緩存會自動清除的.使用優化大師的內存清理工具也是可行的.
㈥ java google 的內存緩存為什麼總調用cacheloader
首先,看一下使用範例:
Java代碼
LoadingCache<Key,Graph> graphs =CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10,TimeUnit.MINUTES)
.removalListener(MY_LISTENER)
.build(
newCacheLoader<Key,Graph>(){
publicGraph load(Key key)throwsAnyException{
return createExpensiveGraph(key);
}
});
適用性
緩存在很多情況下都是非常有用的。比如,我們需要多次根據給定的輸入獲取值,而且該值計算或者獲取的開銷是非常昂貴的。
緩存和ConcurrentMap是非常相像的,但是它們也不完全一樣。最根本的區別就是,ConcurrentMap會持有所有添加的對象,直到被顯示的移除。而緩存為了限制其內存的使用,通常都會配置成可以自動的將對象移除。在某些情況下即使不自動移除對象也是非常有用的,如LoadingCache它會自動載入緩存對象。
一般,Guava緩存適用於以下幾種情況:
你願意花費一些內存來換取性能提升;
你預測到某些鍵會多次進行查詢;
你的緩存數據不超過內存(Guava緩存是單個應用中的本地緩存。它不會將數據存儲到文件中,或者外部伺服器。如果不適合你,可以考慮一下 Memcached)。
如果你的需要符合上面所說的每一條,那麼選擇Guava緩存絕對沒錯。
使用CacheBuilder的構建模式可以獲取一個Cache,如上面的範例所示。但是如何進行定製才是比較有趣的。
注意:如果你不需要緩存的這些特性,那麼使用ConcurrentHashMap會有更好的內存效率,但是如果想基於舊有的ConcurrentMap復制實現Cache的一些特性,那麼可能是非常困難或者根本不可能。
載入
對於緩存首先需要明確的是:有沒有一個方法可以通過給定的鍵來計算/載入相應的值?如果有,那麼可以使用CacheLoader。如果沒有這樣的方法,或者你想復寫緩存的載入方式,但你仍想保留「get-if-absent-compute」語義,你可以在調用get方法時傳入一個Callable實例,來達到目的。緩存的對象可以通過Cache.put直接插入,但是自動載入是首選,因為自動載入可以更加容易的判斷所有緩存信息的一致性。
From a CacheLoader
LoadingCache 緩存是通過一個CacheLoader來構建緩存。創建一個CacheLoader僅需要實現V load(K key) throws Exception方法即可。下面的範例就是如何創建一個LoadingCache:
Java代碼
LoadingCache<Key,Graph> graphs =CacheBuilder.newBuilder()
.maximumSize(1000)
.build(
newCacheLoader<Key,Graph>(){
publicGraph load(Key key)throwsAnyException{
return createExpensiveGraph(key);
}
});
...
try{
return graphs.get(key);
}catch(ExecutionException e){
thrownewOtherException(e.getCause());
}
通過方法get(K)可以對LoadingCache進行查詢。該方法要不返回已緩存的值,要不通過CacheLoader來自動載入相應的值到緩存中。這里需要注意的是:CacheLoader可能會拋出Exception,LoaderCache.get(K)則可能會拋出ExecutionException。假如你定義的CacheLoader沒有聲明檢查型異常,那麼可以通過調用getUnchecked(K)來獲取緩存值;但是一旦當CacheLoader中聲明了檢查型異常,則不可以調用getUnchecked。
Java代碼
LoadingCache<Key,Graph> graphs =CacheBuilder.newBuilder()
.expireAfterAccess(10,TimeUnit.MINUTES)
.build(
newCacheLoader<Key,Graph>(){
publicGraph load(Key key){// no checked exception
return createExpensiveGraph(key);
}
});
...
return graphs.getUnchecked(key);
批量查詢可以使用getAll(Iterable<? extends K>)方法。預設,getAll方法將循環每一個鍵調用CacheLoader.load方法獲取緩存值。當緩存對象的批量獲取比單獨獲取更有效時,可以通過復寫CacheLoader.loadAll方法實現緩存對象的載入。此時當調用getAll(Iterable)方法時性能也會提升。
需要注意的是CacheLoader.loadAll的實現可以為沒有明確要求的鍵載入緩存值。比如,當為某組中的一些鍵進行計算時,loadAll方法則可能會同時載入組中其餘鍵的值。
From a Callable
所有Guava緩存,不論是否會自動載入,都支持get(K, Callable(V))方法。當給定鍵的緩存值已存在時則直接返回,否則通過指定的Callable方法進行計算並將值存放到緩存中。直到載入完成時,相應的緩存才會被更改。該方法簡單實現了"if cached, return; otherwise create, cache and return"語義。
Java代碼
Cache<Key,Value> cache =CacheBuilder.newBuilder()
.maximumSize(1000)
.build();// look Ma, no CacheLoader
...
try{
// If the key wasn't in the "easy to compute" group, we need to
// do things the hard way.
cache.get(key,newCallable<Value>(){
@Override
publicValue call()throwsAnyException{
return doThingsTheHardWay(key);
}
});
}catch(ExecutionException e){
thrownewOtherException(e.getCause());
}
直接插入
使用cache.put(key, value)方法可以將值直接插入到緩存中,但這將會覆蓋緩存中已存在的值。通過使用Cache.asMap()所導出的ConcurrentMap對象中的方法也可以對緩存進行修改。但是,請注意asMap中的任何方法都不能自動的將數據載入到緩存中。也就是說,asMap中的各方法是在緩存自動載入范圍之外來運作。所以,當你使用CacheLoader或Callable來載入緩存時,應該優先使用Cache.get(K, Callable<V>),而不是Cache.asMap().putIfAbsent。
緩存回收
殘酷的現實是我們可以肯定的說我們沒有足夠的內存來緩存一切。你必須來決定:什麼時候緩存值不再值得保留?Guava提供了三種基本的緩存回收策略:基於容量回收策略,基於時間回收策略,基於引用回收策略。
基於容量回收策略
使用CacheBuilder.maximumSize(long)可以設置緩存的最大容量。緩存將會嘗試回收最近沒有使用,或者沒有經常使用的緩存項。警告:緩存可能會在容量達到限制之前執行回收,通常是在緩存大小逼近限制大小時。
另外,如果不同的緩存項有不同的「權重」, 如,緩存項有不同的內存佔用,此時你需要使用CacheBuilder.weigher(Weigher)指定一個權重計算函數,並使用CacheBuilder.maxmumWeight(long)設定總權重。和maximumSize同樣需要注意的是緩存也是在逼近總權重的時候進行回收處理。此外,緩存項的權重是在創建時進行計算,此後不再改變。
Java代碼
LoadingCache<Key,Graph> graphs =CacheBuilder.newBuilder()
.maximumWeight(100000)
.weigher(
newWeigher<Key,Graph>(){
publicint weigh(Key k,Graph g){
return g.vertices().size();
}
})
.build(
newCacheLoader<Key,Graph>(){
publicGraph load(Key key){// no checked exception
return createExpensiveGraph(key);
}
});
基於時間回收策略
CacheBuilder為基於時間的回收提供了兩種方式:
expireAfterAccess(long, TimeUnit) 當緩存項在指定的時間段內沒有被讀或寫就會被回收。這種回收策略類似於基於容量回收策略;
expireAfterWrite(long, TimeUnit) 當緩存項在指定的時間段內沒有更新就會被回收。如果我們認為緩存數據在一段時間後數據不再可用,那麼可以使用該種策略。
就如下面的討論,定時過期回收會在寫的過程中周期執行,偶爾也會讀的過程中執行。
測試定時回收
測試定時回收其實不需要那麼痛苦的,我們不必非得花費2秒來測試一個2秒的過期。在構建緩存時使用Ticker介面,並通過CacheBuilder.ticker(Ticker)方法指定時間源,這樣我們就不用傻乎乎等系統時鍾慢慢的走了。
基於引用回收策略
通過鍵或緩存值的弱引用(weak references),或者緩存值的軟引用(soft references),Guava可以將緩存設置為允許垃圾回收。
CacheBuilder.weakKeys() 使用弱引用存儲鍵。當沒有(強或軟)引用到該鍵時,相應的緩存項將可以被垃圾回收。由於垃圾回收是依賴==進行判斷,因此這樣會導致整個緩存也會使用==來比較鍵的相等性,而不是使用equals();
CacheBuilder.weakValues() 使用弱引用存儲緩存值。當沒有(強或軟)引用到該緩存項時,將可以被垃圾回收。由於垃圾回收是依賴==進行判斷,因此這樣會導致整個緩存也會使用==來比較緩存值的相等性,而不是使用equals();
CacheBuilder.softValues() 使用軟引用存儲緩存值。當響應需要時,軟引用才會被垃圾回收通過最少使用原則回收掉。由於使用軟引用造成性能上的影響,我們強烈建議使用可被預言的maximum cache size的策略來代替。同樣使用softValues()緩存值的比較也是使用==,而不是equals()。
顯示移除
在任何時候,你都可以可以通過下面的方法顯式將無效的緩存移除,而不是被動等待被回收:
使用Cache.invalidate(key)單個移除;
使用Cache.invalidteAll(keys)批量移除;
使用Cache.invalidateAll()移除全部。
㈦ java緩存機制有哪些 m
具體接觸過的緩存機制是hibernate的緩存機制。為了避免每次都向資料庫中取得數據,我們把用戶常常訪問到的數據放到內存中,甚至緩存十分大的時候我們可以把內存中的緩存放到硬碟中。還有高級的分布式緩存資料庫使用,都可以增加系統的抗壓力。
㈧ java內存或者是緩存管理怎麼實現
我不太清楚你為什麼用map來存放數據?你用什麼作為key呢?如果是我做的話我會自定義一個對象,裡面大體上有如下屬性:發言人、發言時間、發言內容等。然後用list存放這些對象,list是由順序的。如果長度到達一定值可以把最先放進去的對象清除掉或移動到其他地方。
㈨ java緩存技術有哪些
常見的java緩存框架有:
OSCache
OSCache是個一個廣泛採用的高性能的J2EE緩存框架,OSCache能用於任何Java應用程序的普通的緩存解決方案。
OSCache有以下特點:
緩存任何對象,你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
擁有全面的API--OSCache API給你全面的程序來控制所有的OSCache特性。
永久緩存--緩存能隨意的寫入硬碟,因此允許昂貴的創建(expensive-to-create)數據來保持緩存,甚至能讓應用重啟。
支持集群--集群緩存數據能被單個的進行參數配置,不需要修改代碼。
緩存記錄的過期--你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略(如果默認性能不需要時)。
官方網站 http://www.opensymphony.com/oscache/
Java Caching System
JSC(Java Caching System)是一個用分布式的緩存系統,是基於伺服器的java應用程序。它是通過提供管理各種動態緩存數據來加速動態web應用。
JCS和其他緩存系統一樣,也是一個用於高速讀取,低速寫入的應用程序。
動態內容和報表系統能夠獲得更好的性能。
如果一個網站,有重復的網站結構,使用間歇性更新方式的資料庫(而不是連續不斷的更新資料庫),被重復搜索出相同結果的,就能夠通過執行緩存方式改進其性能和伸縮性。
官方網站 http://jakarta.apache.org/turbine/jcs/
EHCache
EHCache 是一個純java的在進程中的緩存,它具有以下特性:快速,簡單,為Hibernate2.1充當可插入的緩存,最小的依賴性,全面的文檔和測試。
官方網站 http://ehcache.sourceforge.net/
JCache
JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。
官方網站 http://jcache.sourceforge.net/
ShiftOne
ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。
官方網站 http://jocache.sourceforge.net/
SwarmCache
SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個區域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。
SwarmCache使用JavaGroups來管理從屬關系和分布式緩存的通訊。
官方網站 http://swarmcache.sourceforge.net
TreeCache / JBossCache
JBossCache是一個復制的事務處理緩存,它允許你緩存企業級應用數據來更好的改善性能。緩存數據被自動復制,讓你輕松進行JBoss伺服器之間 的集群工作。JBossCache能夠通過JBoss應用服務或其他J2EE容器來運行一個MBean服務,當然,它也能獨立運行。
JBossCache包括兩個模塊:TreeCache和TreeCacheAOP。
TreeCache --是一個樹形結構復制的事務處理緩存。
TreeCacheAOP --是一個「面向對象」緩存,它使用AOP來動態管理POJO(Plain Old Java Objects)
註:AOP是OOP的延續,是Aspect Oriented Programming的縮寫,意思是面向方面編程。
官方網站 http://www.jboss.org/procts/jbosscache
WhirlyCache
Whirlycache是一個快速的、可配置的、存在於內存中的對象的緩存。它能夠通過緩存對象來加快網站或應用程序的速度,否則就必須通過查詢資料庫或其他代價較高的處理程序來建立。
㈩ java中還有哪些緩存機制技術
所謂緩存,就是將程序或系統經常要調用的對象存在內存中,一遍其使用時可以快速調用,不必再去創建新的重復的實例。這樣做可以減少系統開銷,提高系統效率。
緩存主要可分為二大類:
一、通過文件緩存,顧名思義文件緩存是指把數據存儲在磁碟上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;
二、內存緩存,也就是實現一個類中靜態Map,對這個Map進行常規的增刪查