❶ 什麼叫緩存
所謂的緩存,就是將程序或系統經常要調用的對象存在內存中,一遍其使用時可以快速調用,不必再去創建新的重復的實例。這樣做可以減少系統開銷,提高系統效率。
1、通過文件緩存;顧名思義文件緩存是指把數據存儲在磁碟上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;
2、內存緩存;也就是創建一個靜態內存區域,將數據存儲進去,例如我們B/S架構的將數據存儲在Application中或者存儲在一個靜態Map中。
3、本地內存緩存;就是把數據緩存在本機的內存中。
4、分布式緩存機制;可能存在跨進程,跨域訪問緩存數據
對於分布式的緩存,此時因為緩存的數據是放在緩存伺服器中的,或者說,此時應用程序需要跨進程的去訪問分布式緩存伺服器。
(1)常見的緩存工作模式擴展閱讀
當我們在應用中使用跨進程的緩存機制,例如分布式緩存memcached或者微軟的AppFabric,此時數據被緩存在應用程序之外的進程中。
每次,當我們要把一些數據緩存起來的時候,緩存的API就會把數據首先序列化為位元組的形式,然後把這些位元組發送給緩存伺服器去保存。
同理,當我們在應用中要再次使用緩存的數據的時候,緩存伺服器就會將緩存的位元組發送給應用程序,而緩存的客戶端類庫接受到這些位元組之後就要進行反序列化的操作了,將之轉換為我們需要的數據對象。
❷ 網站緩存功能是什麼意思
提前下載後儲存在本地硬碟中
緩存的最根本的目的是為了提高網站性能,減輕頻繁訪問數據而給資料庫帶來的壓力.再進一步,合理的緩存了某種數據形式,還會減輕程序運算時,對CPU帶來的壓力.首先,我們要知道一個最基本的效率規則,操作內存中的數據比操作存放在硬碟上的數據是要快N個數量級的.操作簡單的文本結構的數據比操作資料庫中的數據快N個數量級.
目前緩存的做法分為兩種模式:
第一種模式是內存緩存,緩存數據存放在伺服器的內存空間中,這種模式的效率是最高的.這里要注意的是:每一個伺服器的資源都是有限的,盲目的把所有數據都加在到內存中,將可能會導致伺服器資源佔用過多,而造成Web服務失敗.
第二種模式就是文件緩存,緩存數據存放在伺服器的硬碟空間中.存放格式有很多種類,如:文本格式,XML格式,二進制格式等等.這里要注意的是,伺服器I/O的處理能力有限,當一次性讀取過大數據時(>1M),它並沒有想像中那麼的高效.這個時候就需要你有一個合理的文件結構來解決了.但這已經不在我們本次要講敘的內容範圍內了.
❸ 緩存的工作原理
緩存的工作原理是當CPU要讀取一個數據時,首先從CPU緩存中查找,找到就立即讀取並送給CPU處理;沒有找到,就從速率相對較慢的內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。正是這樣的讀取機制使CPU讀取緩存的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在CPU緩存中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先緩存後內存。
RAM(Random-Access Memory)和ROM(Read-Only Memory)相對的,RAM是掉電以後,其中的信息就消失那一種,ROM在掉電以後信息也不會消失那一種。RAM又分兩種,一種是靜態RAM,SRAM(Static RAM);一種是動態RAM,DRAM(Dynamic RAM)。前者的存儲速率要比後者快得多,使用的內存一般都是動態RAM。為了增加系統的速率,把緩存擴大就行了,擴的越大,緩存的數據越多,系統就越快了,緩存通常都是靜態RAM,速率是非常的快, 但是靜態RAM集成度低(存儲相同的數據,靜態RAM的體積是動態RAM的6倍), 價格高(同容量的靜態RAM是動態RAM的四倍), 由此可見,擴大靜態RAM作為緩存是一個非常愚蠢的行為, 但是為了提高系統的性能和速率,必須要擴大緩存, 這樣就有了一個折中的方法,不擴大原來的靜態RAM緩存,而是增加一些高速動態RAM做為緩存, 這些高速動態RAM速率要比常規動態RAM快,但比原來的靜態RAM緩存慢, 把原來的靜態RAM緩存叫一級緩存,而把後來增加的動態RAM叫二級緩存。
❹ 緩存的緩存分類
靜態頁面的緩存可能有2種形式:其實主要區別就是CMS是否自己負責關聯內容的緩存更新管理。
1、靜態緩存:是在新內容發布的同時就立刻生成相應內容的靜態頁面,比如:2003年3月22日,管理員通過後台內容管理界面錄入一篇文章後,並同步更新相關索引頁上的鏈接。
2、動態緩存:是在新內容發布以後,並不預先生成相應的靜態頁面,直到對相應內容發出請求時,如果前台緩存伺服器找不到相應緩存,就向後台內容管理伺服器發出請求,後台系統會生成相應內容的靜態頁面,用戶第一次訪問頁面時可能會慢一點,但是以後就是直接訪問緩存了。
靜態緩存的缺點:
復雜的觸發更新機制:這兩種機制在內容管理系統比較簡單的時候都是非常適用的。但對於一個關系比較復雜的網站來說,頁面之間的邏輯引用關系就成為一個非常非常復雜的問題。最典型的例子就是一條新聞要同時出現在新聞首頁和相關的3個新聞專題中,在靜態緩存模式中,每發一篇新文章,除了這篇新聞內容本身的頁面外,還需要系統通過觸發器生成多個新的相關靜態頁面,這些相關邏輯的觸發也往往就會成為內容管理系統中最復雜的部分之一。
舊內容的批量更新: 通過靜態緩存發布的內容,對於以前生成的靜態頁面的內容很難修改,這樣用戶訪問舊頁面時,新的模板根本無法生效。
在動態緩存模式中,每個動態頁面只需要關心,而相關的其他頁面能自動更新,從而大大減少了設計相關頁面更新觸發器的需要。
軟道語錄
緩存
是把最常用的東西放在最容易取得的地方。
❺ Java緩存技術常用的有哪些
常見的java緩存框架有:
OSCache
OSCache是個一個廣泛採用的高性能的J2EE緩存框架,OSCache能用於任何Java應用程序的普通的緩存解決方案。
OSCache有以下特點:
緩存任何對象,你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
擁有全面的API--OSCache API給你全面的程序來控制所有的OSCache特性。
永久緩存--緩存能隨意的寫入硬碟,因此允許昂貴的創建(expensive-to-create)數據來保持緩存,甚至能讓應用重啟。
❻ CPU緩存的工作原理
CPU要讀取一個數據時,首先從Cache中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入Cache中,可以使得以後對整塊數據的讀取都從Cache中進行,不必再調用內存。
正是這樣的讀取機制使CPU讀取Cache的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在Cache中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先Cache後內存。 前面是把Cache作為一個整體來考慮的,下面分類分析。Intel從Pentium開始將Cache分開,通常分為一級高速緩存L1和二級高速緩存L2。在以往的觀念中,L1 Cache是集成在CPU中的,被稱為片內Cache。在L1中還分數據Cache(D-Cache)和指令Cache(I-Cache)。它們分別用來存放數據和執行這些數據的指令,而且兩個Cache可以同時被CPU訪問,減少了爭用Cache所造成的沖突,提高了處理器效能。
在P4處理器中使用了一種先進的一級指令Cache——動態跟蹤緩存。它直接和執行單元及動態跟蹤引擎相連,通過動態跟蹤引擎可以很快地找到所執行的指令,並且將指令的順序存儲在追蹤緩存里,這樣就減少了主執行循環的解碼周期,提高了處理器的運算效率。
以前的L2 Cache沒集成在CPU中,而在主板上或與CPU集成在同一塊電路板上,因此也被稱為片外Cache。但從PⅢ開始,由於工藝的提高L2 Cache被集成在CPU內核中,以相同於主頻的速度工作,結束了L2 Cache與CPU大差距分頻的歷史,使L2 Cache與L1 Cache在性能上平等,得到更高的傳輸速度。L2Cache只存儲數據,因此不分數據Cache和指令Cache。在CPU核心不變化的情況下,增加L2 Cache的容量能使性能提升,同一核心的CPU高低端之分往往也是在L2 Cache上做手腳,可見L2 Cache的重要性。CPU的L1 Cache與L2 Cache惟一區別在於讀取順序。 CPU在Cache中找到有用的數據被稱為命中,當Cache中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。從理論上講,在一顆擁有2級Cache的CPU中,讀取L1 Cache的命中率為80%。也就是說CPU從L1 Cache中找到的有用數據占數據總量的80%,剩下的20%從L2 Cache讀取。在一些高端領域的CPU(像Intel的Itanium)中,我們常聽到L3 Cache,它是為讀取L2 Cache後未命中的數據設計的—種Cache。
為了保證CPU訪問時有較高的命中率Cache中的內容應該按一定的演算法替換,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出Cache,提高Cache的利用率。緩存技術的發展
總之,在傳輸速度有較大差異的設備間都可以利用Cache作為匹配來調節差距,或者說是這些設備的傳輸通道。在顯示系統、硬碟和光碟機,以及網路通訊中,都需要使用Cache技術。但Cache均由靜態RAM組成,結構復雜,成本不菲,使用現有工藝在有限的面積內不可能做得很大,不過,這也正是技術前進的源動力,有需要才有進步! 隨著CPU製造工藝的發展,二級緩存也能輕易的集成在CPU內核中,容量也在逐年提升。用集成在CPU內部與否來定義一、二級緩存,已不確切。而且隨著二級緩存被集成入CPU內核中,以往二級緩存與CPU大差距分頻的情況也被改變,此時其以相同於主頻的速度工作,可以為CPU提供更高的傳輸速度。同一核心的CPU高低端之分往往也是在二級緩存上有差異,由此可見二級緩存對於CPU的重要性。
CPU產品中,一級緩存的容量基本在4KB到64KB之間,二級緩存的容量則分為128KB、256KB、512KB、1MB、2MB等。一級緩存容量各產品之間相差不大,而二級緩存容量則是提高CPU性能的關鍵。二級緩存容量的提升是由CPU製造工藝所決定的,容量增大必然導致CPU內部晶體管數的增加,要在有限的CPU面積上集成更大的緩存,對製造工藝的要求也就越高。
雙核心CPU的二級緩存比較特殊,和以前的單核心CPU相比,最重要的就是兩個內核的緩存所保存的數據要保持一致,否則就會出現錯誤,為了解決這個問題不同的CPU使用了不同的辦法。
❼ ASP.NET緩存常見的4種方式有哪些
1、分布式緩存Memcached
2、內存緩存,此佔用伺服器資源
3、XML緩存,這種最為常見
4、DATATABLE緩存
❽ 硬碟的緩存
想知道「寫入緩存」選項是如何設置的嗎?請打開「設備管理器」,展開「磁碟驅動器」,接著在下面任何一個驅動器圖標上點擊滑鼠右鍵並選擇「屬性」,然後切換到「策略」標簽。在這里你應該會看到兩個選項:「為快速刪除而優化」(所有的東西都直接寫入硬碟驅動器)和「為提高性能而優化」(寫入到緩存)。
第一個選項可以允許你快速的斷開設備與電腦的連接,例如一個USB快閃記憶體,你不用點擊任務欄裡面的「安全刪除硬體」圖標就可以直接把這些設備和電腦斷開。如果兩個選項都處於灰色無法選擇的狀態,那麼說明你的磁碟驅動器默認已經把「寫入緩存」選項打開了。(欲查看更多關於延緩寫入默認狀態的信息,請查看微軟的文章「Windows XP and Surprise Removal of Hardware」 )
在Windows XP系統中有時候會彈出「寫入緩存失敗(Delayed write failed)」的提示,告訴你延緩寫入系統可能存在一些問題。雖然這並不是什麼致命錯誤,不過也值得引起你足夠的關注。
下面是一些常見的引起「寫入緩存失敗」的原因:
1.磁碟驅動器本身的原因。這種情況尤其發生SCSI或者RAID驅動器上。有一些RAID驅動器的驅動程序會在安裝了SP2的XP操作系統中報告一個虛假消息告訴用戶「寫入緩存失敗」。所以你應該為你的磁碟驅動器安裝最新版本的驅動程序。
2.數據線的原因。一些錯誤或者損壞的數據線,特別是外部USB線和火線,會造成這種情況。如果你的數據線過長,或者數據線連接到的是一個質量不合格的USB HUB上,也會造成寫入緩存失敗。最後,還有可能是因為你有一個需要80針數據線的UDMA驅動器,但你卻使用了一條40針腳的數據線。
3.SCSI終止錯誤。雖然這種情況在使用了self-terminating技術的SCSI設備上很少發生,但是我們還是必須把它考慮進來。
4.媒體錯誤。這是可能發生的最嚴重的情況,換句話說,也就是磁碟驅動器壞了。如果你能通過SMART(比如SMART & Simple )軟體獲取磁碟驅動器的統計信息,那麼你可以通過這些信息來判斷磁碟驅動器出現了機械(物理)故障。你還可以使用一個叫Gibson Research's SpinRite的工具來幫助你診斷媒體錯誤,只是這個軟體在對磁碟驅動器進行完全檢測的時候會耗費相當長的時間。
希捷Barracuda 1TB 32M SATA3
5.計算機的BIOS設定強制開啟了驅動器控制器不支持的UDMA模式。雖然UDMA 模式能夠增強磁碟的性能,但是如果驅動器控制器不支持的話將會導致一些錯誤發生。這種情況並不多見,主要是發生在新安裝的硬體設備上(該硬體設備支持UDMA模式),用戶可以通過升級BIOS或者將BIOS中關於硬碟驅動器的選項恢復成默認的「自動檢測」模式來解決這個問題。舉個例子:如果設置成UDMA Mode6模式的設備出現了問題,那麼你可以將它設置成Mode5模式。
6.驅動器控制器的問題。如果你的系統同時擁有長和短兩種PCI插槽(64位和32位),請嘗試將USB控制器從長PCI插槽中拔出。一些比較老的PCI 卡並不支持這種類型的插槽。
7.內存的奇偶校驗錯誤。這種情況通常發生在你新增了一條內存之後,造成這種錯誤的原因是很可能是你的新內存條和主板所支持的內存類型不符,或者是內存本身有問題。(內存有問題還會造成其他一些錯誤,例如隨機死鎖等)
8.注冊表中的LargeSystemCache鍵值錯誤。這種情況很少見,通常發生在那些安裝了ATI顯示適配器,內存大於521MB的機器上。這些機器上的注冊表中有一個叫做LargeSystemCache的鍵
(HKEY LOCAL ManagerMemory Management),該鍵值用來管理系統分配給一些核心進程的內存容量,如果鍵值被設為1的話(這樣設置可以增強內存大於512MB的機器的性能),有可能會在一些系統中導致數據錯誤和產生寫入緩存失敗的錯誤。如果出現這種情況的話,請把該鍵值改為0。
❾ 哪位了解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技術的頁面
❿ 常用的緩存技術
第一章 常用的緩存技術
1、常見的兩種緩存
本地緩存:不需要序列化,速度快,緩存的數量與大小受限於本機內存
分布式緩存:需要序列化,速度相較於本地緩存較慢,但是理論上緩存的數量與大小無限(因為緩存機器可以不斷擴展)
2、本地緩存
Google guava cache:當下最好用的本地緩存
Ehcache:spring默認集成的一個緩存,以spring cache的底層緩存實現類形式去操作緩存的話,非常方便,但是欠缺靈活,如果想要靈活使用,還是要單獨使用Ehcache
Oscache:最經典簡單的頁面緩存
3、分布式緩存
memcached:分布式緩存的標配
Redis:新一代的分布式緩存,有替代memcached的趨勢
3.1、memcached
經典的一致性hash演算法
基於slab的內存模型有效防止內存碎片的產生(但同時也需要估計好啟動參數,否則會浪費很多的內存)
集群中機器之間互不通信(相較於Jboss cache等集群中機器之間的相互通信的緩存,速度更快<--因為少了同步更新緩存的開銷,且更適合於大型分布式系統中使用)
使用方便(這一點是相較於Redis在構建客戶端的時候而言的,盡管redis的使用也不困難)
很專一(專做緩存,這一點也是相較於Redis而言的)
3.2、Redis
可以存儲復雜的數據結構(5種)
strings-->即簡單的key-value,就是memcached可以存儲的唯一的一種形式,接下來的四種是memcached不能直接存儲的四種格式(當然理論上可以先將下面的一些數據結構中的東西封裝成對象,然後存入memcached,但是不推薦將大對象存入memcached,因為memcached的單一value的最大存儲為1M,可能即使採用了壓縮演算法也不夠,即使夠,可能存取的效率也不高,而redis的value最大為1G)
hashs-->看做hashTable
lists-->看做LinkedList
sets-->看做hashSet,事實上底層是一個hashTable
sorted sets-->底層是一個skipList
有兩種方式可以對緩存數據進行持久化
RDB
AOF
事件調度
發布訂閱等
4、集成緩存
專指spring cache,spring cache自己繼承了ehcache作為了緩存的實現類,我們也可以使用guava cache、memcached、redis自己來實現spring cache的底層。當然,spring cache可以根據實現類來將緩存存在本地還是存在遠程機器上。
5、頁面緩存
在使用jsp的時候,我們會將一些復雜的頁面使用Oscache進行頁面緩存,使用非常簡單,就是幾個標簽的事兒;但是,現在一般的企業,前台都會使用velocity、freemaker這兩種模板引擎,本身速度就已經很快了,頁面緩存使用的也就很少了。
總結:
在實際生產中,我們通常會使用guava cache做本地緩存+redis做分布式緩存+spring cache就集成緩存(底層使用redis來實現)的形式
guava cache使用在更快的獲取緩存數據,同時緩存的數據量並不大的情況
spring cache集成緩存是為了簡單便捷的去使用緩存(以註解的方式即可),使用redis做其實現類是為了可以存更多的數據在機器上
redis緩存單獨使用是為了彌補spring cache集成緩存的不靈活
就我個人而言,如果需要使用分布式緩存,那麼首先redis是必選的,因為在實際開發中,我們會緩存各種各樣的數據類型,在使用了redis的同時,memcached就完全可以舍棄了,但是現在還有很多公司在同時使用memcached和redis兩種緩存。