java文件緩存技術
Java的緩存機制是通過JVM(Java虛擬機)提供的運行時緩存來實現的,由於JVM是不跨平台的(Java的跨平台正是通過JVM的不跨平台來實現的),所以JVM的緩存機制沒有實現本地臨時存儲,因此你找不到所謂Java的緩存文件夾。這些問題你不用這么糾結,實在不清楚的話打電話問一下官方人員就清楚了。
Ⅱ 什麼是Java緩存技術Cache
java緩存技術
一、什麼是緩存
1、Cache是高速緩沖存儲器 一種特殊的存儲器子系統,其中復制了頻繁使用的數據以利於快速訪問
2、凡是位於速度相差較大的兩種硬體/軟體之間的,用於協調兩者數據傳輸速度差異的結構,均可稱之為 Cache
二、緩存的分類
1、基於web應用的系統架構圖
2、在系統架構的不同層級之間,為了加快訪問速度,都可以存在緩存
操作系統磁碟緩存->減少磁碟機械操作
資料庫緩存->減少文件系統I/O
應用程序緩存->減少對資料庫的查詢
Web伺服器緩存->減少應用伺服器請求
客戶端瀏覽器緩存->減少對網站的訪問。
Ⅲ java如何清除數據緩存
java清除緩存辦法:
1.禁止客戶端緩存要在<head>中加入類似如下內容:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或 <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
2.在伺服器的動態網頁中禁止緩存,要加入類似如下腳本
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
Ⅳ Java進階:用緩沖技術提高JSP的性能和穩定
一 概述
在Web應用中 有些報表的生成可能需要資料庫花很長時間才能計算出來 有的網站提供天氣信息 它需要訪問遠程伺服器進行SOAP調用才能得到溫度信息 所有這一切都屬於復雜信息的例子 在Web頁面中加入過多的復雜信息可能導致Web伺服器 資料庫伺服器負荷過重 JSP代碼塊緩沖為開發者帶來了隨意地增加各種復雜信息的自由
JSP能夠在標記庫內封裝和運行復雜的Java代碼 它使得JSP頁面文件更容易維護 使得非專業開發人員使用JSP頁面文件更加方便 現在已經有許多標記庫 它們或者是商業產品 或者是源代碼開放產品 但這些產品中的大多數都只是用標記庫的形式實現原本可以用一個簡單的Java Scriptlet實現的功能 很少有產品以某種創造性的方式使用定製標記 提供在出現JSP定製標記庫之前幾乎不可能實現的用法
OSCache標記庫由OpenSymphony設計 它是一種開創性的JSP定製標記應用 提供了在現有JSP頁面之內實現快速內存緩沖的功能 雖然已經有一些供應商在提供各種形式的緩存產品 但是 它們都屬於面向特定供應商的產品 OSCache能夠在任何JSP 兼容的伺服器上運行 它不僅能夠為所有用戶緩沖現有JSP代碼塊 而且能夠以用戶為單位進行緩沖 OSCache還包含一些提高可伸縮性的高級特性 比如 緩沖到磁碟 可編程的緩沖刷新 異常控制 等等 另外 正如OpenSymphony的其他產品 OSCache的代碼也在一個開放源代碼許可協議之下免費發行
本文以一個假想的拍賣網站設計過程為例 介紹OSCache的工作過程 這個假想的Web網站將包含 一個報告最近拍賣活動的管理頁面 一個功能完整 帶有各種宣傳信息的主頁 一個特殊的導航條 它包含了用戶所有尚未成交的拍賣活動信息
二 管理頁面
拍賣網站包含一個管理報表 資料庫伺服器需要數秒時間才能創建這樣一個報表 報表生成時間長這一點很重要 因為我們可能讓多個管理員監視系統運行情況 同時又想避免管理員每次訪問時都重新生成這個報表 為了實現這一點 我們將把整個頁面封裝到一個應用級的緩沖標記之內 這個緩沖標記每隔 小時刷新 其他供應商提供的一些產品也具有類似的功能 只是OSCache比它們做得更好
為簡單計 我們將不過多地關注格式問題 在編寫管理頁面時 我們首先把標記庫聲明加入到頁面
<%@ taglib uri= cachetags prefix= cache %>
接下來我們要用cache標記來包圍整個頁面 cache標記的默認緩沖時間是 小時
<cache:cache> 復雜的管理報表 </cache:cache>
現在管理頁面已經被緩沖 如果管理員在頁面生成後的一個小時之內再次訪問同一頁面 他看到的將是以前緩存的頁面 不需要由資料庫伺服器再次生成這個報表
三 主頁
拍賣網站的主頁顯示網站活動情況 宣傳那些即將結束的拍賣活動 我們希望顯示出正在進行的拍賣活動數量 當前登錄用戶數量 在短期內就要結束的拍賣活動的清單 以及當前時間 這些信息有著不同的時間精確度要求 網站上的拍賣活動通常持續數天 因此我們可以把緩沖有效拍賣活動數量的時間定為 個小時 用戶數量的變化顯然要頻繁一些 但這里我們將把這個數值每次緩沖 分鍾 最後 我們希望頁面中顯示的當前時間總是精確的頁面訪問時間
在主頁中聲明標記庫之後 我們首先以不帶緩沖的方式直接輸出當前日期
現在是 <%=new java util Date()%>
接下來 我們要顯示一個清單 列出那些將在短期內結束的拍賣活動
<cache:cache> <ul> <% // 構造一個包含最近拍賣活動的Iterator Iterator auctions = while (auctions hasMore()) { Auction auction = (Auction)auctions next(); %><li><%=auction%></li%< } %> </ul> </cache:cache>
最後 我們希望顯示出正在進行的拍賣活動的數量 這個數字需要緩沖 小時 由於cache標記需要的是緩沖數據的秒數 我們把 小時轉換成 秒
<cache:cache time= > <% //查詢資料庫得到拍賣活動總數 int auctionCount = %> 本網站正在進行的拍賣活動有<%=auctionCount%>個! </cache>
可以看到 我們只用少量的代碼就構造出了一個帶有復雜緩沖系統的主頁 這個緩沖系統對頁面各個部分分別進行緩沖 而且各個部分的緩沖時間完全符合它們各自的信息變化頻繁程度 由於有了緩沖 現在我們可以在主頁中放入更多的內容 而在以前沒有緩沖的情況下 主頁中放入過多的內容會導致頁面訪問速度變慢 甚至可能給資料庫伺服器帶來過重的負載
四 導航條
假設在規劃網站的時候 我們決定在左邊導航條的下方顯示購物車內容 我們將顯示出用戶所拍賣的每一種商品的出價次數和當前報價 以及所有那些當前用戶出價最高的商品的清單
我們利用會話級的緩沖能力在導航條中構造上述功能 把下面的代碼放入模板或者包含文件 以便網站中的其他頁面引用這個導航條
<cache:cache key= navbar scope= session time= > <% //提取並顯示當前的出價信息 %> </cache:cache>
在這里我們引入了兩個重要的屬性 即key和scope 在本文前面的代碼中 由於cache標記能夠自動為代碼塊創建唯一的key 所以我們不需要手工設置這個key屬性 但在這里 我們想要從網站的其餘部分引用這個被緩沖的代碼塊 因此我們顯式定義了該cache標記的key屬性 第二 scope屬性用來告訴cache標記當前代碼塊必須以用戶為單位緩沖 而不是為所有用戶緩沖一次
在使用會話級緩沖時應該非常小心 應該清楚 雖然我們可以讓復雜的導航條減少 倍或 倍的伺服器負載 但它將極大地增加每個會話所需要的內存空間 在CPU能力方面增加可能的並發用戶數量無疑很理想 但是 一旦在內存支持能力方面讓並發用戶數量降低到了CPU的限制之下 這個方案就不再理想
正如本文前面所提到的 我們希望從網站的其餘部分引用這個緩沖的代碼塊 這是因為 當一個用戶增加了一個供拍賣的商品 或者出價競購其他用戶拍賣的商品時 我們希望刷新緩沖 使得導航條下一次被讀取時具有最新的內容 雖然這些數據可能因為其他用戶的活動而改變 但如果用戶在網站上執行某個動作之後看到自己的清單仍未改變 他可能會感到非常困惑
OSCache庫提供的flush標記能夠刷新緩沖內容 我們可以把下面的代碼加入到處理用戶動作且可能影響這一區域的頁面之中
<cache:flush key= navbar scope= session />
當用戶下次訪問它時 navbar緩沖塊將被刷新
至此為止 我們這個示例網站的構造工作已經完成且可以開始運行 下面我們來看看OSCache的異常處理能力 即使緩沖的內容已經作廢 比如在緩沖塊內出現了Java異常 OSCache標記庫仍舊允許我們用編程的方法顯示這些內容 有了這種異常控制功能 我們可以拆除資料庫伺服器和Web伺服器之間的連接 而網站仍能夠繼續運行 JSP 規范引入了TryCatchFinally介面 這個介面允許標記本身檢測和處理Java異常 因此 標記可以結合這種異常處理代碼 使得JSP頁面更簡單 更富有條理
OpenSymphony正在計劃實現其他的緩沖機制以及一個可管理性更好的主系統 它將使我們能夠對緩沖使用的RAM和磁碟空間進行管理 一旦有了這些功能 我們就能夠進一步提高網站的響應速度和可靠性
【結束語】
lishixin/Article/program/Java/JSP/201311/20726
Ⅳ 北大青鳥java培訓:php應用中常用的9大緩存技術
一、全頁面靜態化緩存也就是將頁面全部生成html靜態頁面,用戶訪問時直接訪問的靜態頁面,而不會去走php伺服器解析的流程。
此種方式,在CMS系統中比較常見,比如dedecms;一種比較常用的實現方式是用輸出緩存:Ob_start()******要運行的代碼*******$content=Ob_get_contents();****將緩存內容寫入html文件*****Ob_end_clean();二、數據緩存顧名思義,就是緩存數據的一種方式;比如,商城中的某個商品信息,當用商品id去請求時,就會得出包括店鋪信息、商品信息等數據,此時就可以將這些數據緩存到一個php文件中,文件名包含商品id來建一個唯一標示;下一次有人想查看這個商品時,首先就直接調這個文件裡面的信息,而不用再去資料庫查詢;其實緩存文件中緩存的就是一個php數組之類;Ecmall商城系統裡面就用了這種方式;三、查詢緩存其實這跟數據緩存是一個思路,就是根據查詢語句來緩存;將查詢得到的數據緩存在一個文件中,下次遇到相同的查詢時,就直接先從這個文件裡面調數據,不會再去查資料庫;但此處的緩存文件名可能就需要以查詢語句為基點來建立唯一標示;按時間變更進行緩存就是對於緩存文件您需要設一個有效時間,在這個有效時間內,相同的訪問才會先取緩存文件的內容,但是超過設定的緩存時間,就需要重新從資料庫中獲取數據,並生產最新的緩存文件;比如,我將我們商城的首頁就是設置2個小時更新一次。
四、頁面部分緩存該種方式,是將一個頁面中不經常變的部分進行靜態緩存,而經常變化的塊不緩存,最後組裝在一起顯示;可以使用類似於ob_get_contents的方式實現,也可以利用類似ESI之類的頁面片段緩存策略,使其用來做動態頁面中相對靜態的片段部分的緩存。
該種方式可以用於如商城中的商品頁;五、Opcode緩存首先php代碼被解析為Tokens,然後再編譯為Opcode碼,最後執行Opcode碼,返回結果;所以,對於相同的php文件,第一次運行時可以緩存其Opcode碼,下次再執行這個頁面時,直接會去找到緩存下的opcode碼,直接執行最後一步,而不再需要中間的步驟了。
比較知名的是XCache、TurckMMCache、PHPAccelerator等。
六、按內容變更進行緩存這個也並非獨立的緩存技術,需結合著用;就是當資料庫內容被修改時,即刻更新緩存文件;比如,一個人流量很大的商城,商品很多,商品表必然比較大,這表的壓力也比較重;我們就可以對商品顯示頁進行頁面緩存;當商家在後台修改這個商品的信息時,點擊保存,我們同時就更新緩存文件;那麼,買家訪問這個商品信息時,實際問的是一個靜態頁面,而不需要再去訪問資料庫;試想,如果對商品頁不緩存,那麼每次訪問一個商品就要去資料庫查一次,如果有10萬人在線瀏覽商品,那伺服器壓力就大了;七、內存式緩存提到這個,可能大家想到的首先就是Memcached;memcached是高性能的分布式內存緩存伺服器。
一般的使用目的是,通過緩存資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
它就是將需要緩存的信息,緩存到系統內存中,需要獲取信息時,直接到內存中取;比較常用的方式就是key_>value方式;connect($memcachehost,$memcacheport)ordie("Couldnotconnect");$memcache->set('key','緩存的內容');$get=$memcache->get($key);//獲取信息?>八、apache緩存模塊apache安裝完以後,是不允許被cache的。
天津IT培訓http://www.kmbdqn.cn/認為如果外接了cache或squid伺服器要求進行web加速的話,就需要在htttpd.conf里進行設置,當然前提是在安裝apache的時候要激活mod_cache的模塊。
Ⅵ Java緩存技術常用的有哪些
常見的java緩存框架有:
OSCache
OSCache是個一個廣泛採用的高性能的J2EE緩存框架,OSCache能用於任何Java應用程序的普通的緩存解決方案。
OSCache有以下特點:
緩存任何對象,你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
擁有全面的API--OSCache API給你全面的程序來控制所有的OSCache特性。
永久緩存--緩存能隨意的寫入硬碟,因此允許昂貴的創建(expensive-to-create)數據來保持緩存,甚至能讓應用重啟。
Ⅶ java中文件讀取的緩存問題
read方法又不止一個……
public int read(byte[] b)
throws IOException
從輸入流中讀取一定數量的位元組,並將其存儲在緩沖區數組 b
中。以整數形式返回實際讀取的位元組數。在輸入數據可用、檢測到文件末尾或者拋出異常前,此方法一直阻塞。
如果 b 的長度為 0,則不讀取任何位元組並返回
0;否則,嘗試讀取至少一個位元組。如果因為流位於文件末尾而沒有可用的位元組,則返回值
-1;否則,至少讀取一個位元組並將其存儲在 b 中。
Ⅷ java清緩存前可以進後台方法,清完緩存不進了
關於java清緩存前可以進後台方法,清完緩存不進了相關資料如下
java我們在使用緩存時,往往先嘗試去緩存中取值,如果沒有,再去資料庫取值,如果資料庫也沒有值,則根據業務需求,返回空或者拋異常。
如果用戶一直訪問一個資料庫不存在的數據,比如id為-1的數據,就會導致每次請求都會先去緩存查一次,然後再去資料庫查一次,造成嚴重的性能問題。這種情況就叫緩存穿透。
解決方案
以下幾種解決方案:對請求參數做校驗,比如用戶鑒權校驗,id做基礎校驗,id <= 0的直接攔截。
如果查詢到資料庫沒有值,也將對應的key存進緩存中,value為null。這樣下次查詢就直接從緩存返回了。但這里的key的緩存時間應該比較短,比如30s。防止後面在資料庫插入了這條數據,而用戶獲取不到。
使用布隆過濾器,判斷一個key是否已經查過了,如果已經查過了,就不去資料庫查詢。
緩存擊穿
緩存擊穿指的是,一個key的訪問量非常大,比如某秒殺活動,有1w/s的並發量。這個key在某一時刻過期,那這些大量的請求就會一瞬間到資料庫,資料庫可能會直接崩潰。
解決方案
緩存擊穿的解決方案也有幾種,可以配合使用:對於熱點數據,慎重考慮過期時間,確保熱點期間key不會過期,甚至有些可以設置永不過期。
使用互斥鎖(比如Java的多線程鎖機制),第一個線程訪問key的時候就鎖住,等查詢資料庫返回後,把值插入到緩存後再釋放鎖,這樣後面的請求就可以直接取緩存裡面的數據了。
緩存雪崩
緩存雪崩指的是,在某一時刻,多個key失效。這樣就會有大量的請求從緩存中獲取不到值,全部到資料庫。還有另一種情況,就是緩存伺服器宕機,也算做緩存雪崩。
解決方案
針對上述兩種情況,緩存雪崩有兩種解決方案:對每個key的過期時間設置一個隨機值,而不是所有key都相同。
使用高可用的分布式緩存集群,確保緩存的高可用性,比如redis-cluster。
Ⅸ java怎麼實現map 緩存技術
/**
*緩存池
*@authorxiaoquan
*@create2015年3月13日上午10:32:13
*@see
*/
publicclassCachePool{
;//緩存池唯一實例
privatestaticMap<String,Object>cacheItems;//緩存Map
privateCachePool(){
cacheItems=newHashMap<String,Object>();
}
/**
*得到唯一實例
*@return
*/
(){
if(instance==null){
instance=newCachePool();
}
returninstance;
}
/**
*清除所有Item緩存
*/
(){
cacheItems.clear();
}
/**
*獲取緩存實體
*@paramname
*@return
*/
(Stringname){
if(!cacheItems.containsKey(name)){
returnnull;
}
CacheItemcacheItem=(CacheItem)cacheItems.get(name);
if(cacheItem.isExpired()){
returnnull;
}
returncacheItem.getEntity();
}
/**
*存放緩存信息
*@paramname
*@paramobj
*@paramexpires
*/
(Stringname,Objectobj,longexpires){
if(!cacheItems.containsKey(name)){
cacheItems.put(name,newCacheItem(obj,expires));
}
CacheItemcacheItem=(CacheItem)cacheItems.get(name);
cacheItem.setCreateTime(newDate());
cacheItem.setEntity(obj);
cacheItem.setExpireTime(expires);
}
(Stringname,Objectobj){
putCacheItem(name,obj,-1);
}
/**
*移除緩存數據
*@paramname
*/
(Stringname){
if(!cacheItems.containsKey(name)){
return;
}
cacheItems.remove(name);
}
/**
*獲取緩存數據的數量
*@return
*/
publicintgetSize(){
returncacheItems.size();
}
}
publicclassCacheItem{
privateDatecreateTime=newDate();//創建緩存的時間
privatelongexpireTime=1;//緩存期滿的時間
privateObjectentity;//緩存的實體
publicCacheItem(Objectobj,longexpires){
this.entity=obj;
this.expireTime=expires;
}
publicbooleanisExpired(){
return(expireTime!=-1&&newDate().getTime()-createTime.getTime()>expireTime);
}
/**
*省略getter、setter方法
*/
}
Ⅹ java緩存技術有哪些
1、OSCache
OSCache是個一個廣泛採用的高性能的J2EE緩存框架,OSCache能用於任何java應用程序的普通的緩存解決方案。
OSCache有以下特點:
(1)緩存任何對象,你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
永久緩存--緩存能隨意的寫入硬碟,因此答應昂貴的創建(eXPensive-to-create)數據來保持緩存,甚至能讓應用重啟。
(2)支持集群--集群緩存數據能被單個的進行參數配置,不需要修改代碼。
緩存記錄的過期--你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略(假如默認性能不需要時)。
2、Java Caching System
JSC(Java Caching System)是一個用分布式的緩存系統,是基於伺服器的java應用程序。它是通過提供治理各種動態緩存數據來加速動態web應用。
JCS和其他緩存系統一樣,也是一個用於高速讀取,低速寫入的應用程序。
動態內容和報表系統能夠獲得更好的性能。
假如一個網站,有重復的網站結構,使用間歇性更新方式的資料庫(而不是連續不斷的更新資料庫),被重復搜索出相同結果的,就能夠通過執行緩存方式改進其性能和伸縮性。
3、EHCache
EHCache 是一個純java的在進程中的緩存,它具有以下特性:快速,簡單,為Hibernate2.1充當可插入的緩存,最小的依靠性,全面的文檔和測試。
4、JCache
JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。
5、ShiftOne
ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。
6、SwarmCache
SwarmCache是一個簡單且有效的分布式緩存,它使用ip multicast與同一個區域網的其他主機進
行通訊,是非凡為集群和數據驅動web應用程序而設計的。
SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。
SwarmCache使用JavaGroups來治理從屬關系和分布式緩存的通訊。
(10)java文件緩存技術擴展閱讀
Java中緩存存在的原因:
一 般情況下,一個網站,或者一個應用,它的一般形式是,瀏覽器請求應用伺服器,應用伺服器做一堆計算後再請求資料庫,資料庫收到請求後再作一堆計算後把數據 返回給應用伺服器。
應用伺服器再作一堆計算後把數據返回給瀏覽器,這個是一個標准流程。但是隨著互連網的普及,上網的人越來越多,網上的信息量也越來越多。
資料庫每秒中接受請求的次數也是有限的,如果利用有限的資源來提供盡可能大的吞吐量呢。一個辦法:減少計算量,縮短請求流程(減少網路io或者硬碟io),這時候緩存就可以大展手腳了。
緩存的基本原理就是打破上圖中所描繪的標准流程,在這個標准流程中,任何 一個環節都可以被切斷.請求可以從緩存里取到數據直接返回。